aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-11-26 14:59:03 -0800
committerChris Lu <chris.lu@gmail.com>2020-11-26 14:59:03 -0800
commitb11449f95588beb8373b1f8bc5753fb45d2dc405 (patch)
tree4e06875c93aea9a4dbbf210aadbcd7ad4355e2d8
parent0d345ac97d941bef0991c0cb08632ccf08c0ee83 (diff)
downloadseaweedfs-b11449f95588beb8373b1f8bc5753fb45d2dc405.tar.xz
seaweedfs-b11449f95588beb8373b1f8bc5753fb45d2dc405.zip
pass in dir.idx parameter to DiskLocation
-rw-r--r--weed/command/server.go1
-rw-r--r--weed/command/volume.go3
-rw-r--r--weed/server/volume_server.go3
-rw-r--r--weed/storage/disk_location.go17
-rw-r--r--weed/storage/store.go5
5 files changed, 23 insertions, 6 deletions
diff --git a/weed/command/server.go b/weed/command/server.go
index 4a9c2411a..0c6731eb2 100644
--- a/weed/command/server.go
+++ b/weed/command/server.go
@@ -105,6 +105,7 @@ func init() {
serverOptions.v.publicUrl = cmdServer.Flag.String("volume.publicUrl", "", "publicly accessible address")
serverOptions.v.preStopSeconds = cmdServer.Flag.Int("volume.preStopSeconds", 10, "number of seconds between stop send heartbeats and stop volume server")
serverOptions.v.pprof = cmdServer.Flag.Bool("volume.pprof", false, "enable pprof http handlers. precludes --memprofile and --cpuprofile")
+ serverOptions.v.idxFolder = cmdServer.Flag.String("volume.dir.idx", "", "directory to store .idx files")
s3Options.port = cmdServer.Flag.Int("s3.port", 8333, "s3 server http listen port")
s3Options.domainName = cmdServer.Flag.String("s3.domainName", "", "suffix of the host name in comma separated list, {bucket}.{domainName}")
diff --git a/weed/command/volume.go b/weed/command/volume.go
index ce5992665..9597e843a 100644
--- a/weed/command/volume.go
+++ b/weed/command/volume.go
@@ -39,6 +39,7 @@ type VolumeServerOptions struct {
publicPort *int
folders []string
folderMaxLimits []int
+ idxFolder *string
ip *string
publicUrl *string
bindIp *string
@@ -83,6 +84,7 @@ func init() {
v.fileSizeLimitMB = cmdVolume.Flag.Int("fileSizeLimitMB", 256, "limit file size to avoid out of memory")
v.pprof = cmdVolume.Flag.Bool("pprof", false, "enable pprof http handlers. precludes --memprofile and --cpuprofile")
v.metricsHttpPort = cmdVolume.Flag.Int("metricsPort", 0, "Prometheus metrics listen port")
+ v.idxFolder = cmdVolume.Flag.String("dir.idx", "", "directory to store .idx files")
}
var cmdVolume = &Command{
@@ -211,6 +213,7 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
volumeServer := weed_server.NewVolumeServer(volumeMux, publicVolumeMux,
*v.ip, *v.port, *v.publicUrl,
v.folders, v.folderMaxLimits, v.minFreeSpacePercents,
+ *v.idxFolder,
volumeNeedleMapKind,
strings.Split(masters, ","), 5, *v.dataCenter, *v.rack,
v.whiteList,
diff --git a/weed/server/volume_server.go b/weed/server/volume_server.go
index 83df32fdd..468f75890 100644
--- a/weed/server/volume_server.go
+++ b/weed/server/volume_server.go
@@ -38,6 +38,7 @@ type VolumeServer struct {
func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string,
port int, publicUrl string,
folders []string, maxCounts []int, minFreeSpacePercents []float32,
+ idxFolder string,
needleMapKind storage.NeedleMapType,
masterNodes []string, pulseSeconds int,
dataCenter string, rack string,
@@ -75,7 +76,7 @@ func NewVolumeServer(adminMux, publicMux *http.ServeMux, ip string,
vs.checkWithMaster()
- vs.store = storage.NewStore(vs.grpcDialOption, port, ip, publicUrl, folders, maxCounts, minFreeSpacePercents, vs.needleMapKind)
+ vs.store = storage.NewStore(vs.grpcDialOption, port, ip, publicUrl, folders, maxCounts, minFreeSpacePercents, idxFolder, vs.needleMapKind)
vs.guard = security.NewGuard(whiteList, signingKey, expiresAfterSec, readSigningKey, readExpiresAfterSec)
handleStaticResources(adminMux)
diff --git a/weed/storage/disk_location.go b/weed/storage/disk_location.go
index 775ebf092..f2b0d7e9f 100644
--- a/weed/storage/disk_location.go
+++ b/weed/storage/disk_location.go
@@ -18,6 +18,7 @@ import (
type DiskLocation struct {
Directory string
+ IdxDirectory string
MaxVolumeCount int
OriginalMaxVolumeCount int
MinFreeSpacePercent float32
@@ -31,8 +32,20 @@ type DiskLocation struct {
isDiskSpaceLow bool
}
-func NewDiskLocation(dir string, maxVolumeCount int, minFreeSpacePercent float32) *DiskLocation {
- location := &DiskLocation{Directory: dir, MaxVolumeCount: maxVolumeCount, OriginalMaxVolumeCount: maxVolumeCount, MinFreeSpacePercent: minFreeSpacePercent}
+func NewDiskLocation(dir string, maxVolumeCount int, minFreeSpacePercent float32, idxDir string) *DiskLocation {
+ dir = util.ResolvePath(dir)
+ if idxDir == "" {
+ idxDir = dir
+ } else {
+ idxDir = util.ResolvePath(idxDir)
+ }
+ location := &DiskLocation{
+ Directory: dir,
+ IdxDirectory: idxDir,
+ MaxVolumeCount: maxVolumeCount,
+ OriginalMaxVolumeCount: maxVolumeCount,
+ MinFreeSpacePercent: minFreeSpacePercent,
+ }
location.volumes = make(map[needle.VolumeId]*Volume)
location.ecVolumes = make(map[needle.VolumeId]*erasure_coding.EcVolume)
go location.CheckDiskSpace()
diff --git a/weed/storage/store.go b/weed/storage/store.go
index 7f2415448..ce4e500d6 100644
--- a/weed/storage/store.go
+++ b/weed/storage/store.go
@@ -16,7 +16,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/storage/needle"
"github.com/chrislusf/seaweedfs/weed/storage/super_block"
. "github.com/chrislusf/seaweedfs/weed/storage/types"
- "github.com/chrislusf/seaweedfs/weed/util"
)
const (
@@ -53,11 +52,11 @@ func (s *Store) String() (str string) {
return
}
-func NewStore(grpcDialOption grpc.DialOption, port int, ip, publicUrl string, dirnames []string, maxVolumeCounts []int, minFreeSpacePercents []float32, needleMapKind NeedleMapType) (s *Store) {
+func NewStore(grpcDialOption grpc.DialOption, port int, ip, publicUrl string, dirnames []string, maxVolumeCounts []int, minFreeSpacePercents []float32, idxFolder string, needleMapKind NeedleMapType) (s *Store) {
s = &Store{grpcDialOption: grpcDialOption, Port: port, Ip: ip, PublicUrl: publicUrl, NeedleMapType: needleMapKind}
s.Locations = make([]*DiskLocation, 0)
for i := 0; i < len(dirnames); i++ {
- location := NewDiskLocation(util.ResolvePath(dirnames[i]), maxVolumeCounts[i], minFreeSpacePercents[i])
+ location := NewDiskLocation(dirnames[i], maxVolumeCounts[i], minFreeSpacePercents[i], idxFolder)
location.loadExistingVolumes(needleMapKind)
s.Locations = append(s.Locations, location)
stats.VolumeServerMaxVolumeCounter.Add(float64(maxVolumeCounts[i]))