Browse Source

sync collection settings between master and volume

topology vacuum use collection gc setting
pull/279/head
tnextday 10 years ago
parent
commit
d9ef4329f9
  1. 42
      go/storage/collection_settings.go
  2. 29
      go/storage/store.go
  3. 32
      go/topology/store_replicate.go
  4. 8
      go/topology/topology_event_handling.go
  5. 6
      go/topology/topology_vacuum.go
  6. 2
      go/weed/weed_server/master_server.go
  7. 1
      go/weed/weed_server/master_server_handlers_admin.go
  8. 85
      go/weedpb/system_message.pb.go
  9. 2
      go/weedpb/system_message.proto

42
go/storage/collection_settings.go

@ -1,6 +1,6 @@
package storage
import "sync"
import "github.com/chrislusf/seaweedfs/go/weedpb"
type SettingKey int
@ -11,7 +11,6 @@ const (
type CollectionSettings struct {
settings map[string]map[SettingKey]interface{}
mutex sync.RWMutex
}
func NewCollectionSettings(defaultReplicatePlacement, defaultGarbageThreshold string) *CollectionSettings {
@ -27,9 +26,35 @@ func NewCollectionSettings(defaultReplicatePlacement, defaultGarbageThreshold st
return c
}
func NewCollectionSettingsFromPbMessage(msg []*weedpb.CollectionSetting) *CollectionSettings {
c := &CollectionSettings{
settings: make(map[string]map[SettingKey]interface{}),
}
for _, m := range msg {
c.SetGarbageThreshold(m.Collection, m.VacuumGarbageThreshold)
c.SetReplicaPlacement(m.Collection, m.ReplicaPlacement)
}
return c
}
func (cs *CollectionSettings) ToPbMessage() []*weedpb.CollectionSetting {
msg := make([]*weedpb.CollectionSetting, 0, len(cs.settings))
for collection, m := range cs.settings {
setting := &weedpb.CollectionSetting{
Collection: collection,
}
if v, ok := m[keyReplicatePlacement]; ok {
setting.ReplicaPlacement = v.(*ReplicaPlacement).String()
}
if v, ok := m[keyGarbageThreshold]; ok {
setting.ReplicaPlacement = v.(string)
}
msg = append(msg, setting)
}
return msg
}
func (cs *CollectionSettings) get(collection string, key SettingKey) interface{} {
cs.mutex.RLock()
defer cs.mutex.RUnlock()
if m, ok := cs.settings[collection]; ok {
if v, ok := m[key]; ok {
return v
@ -42,8 +67,6 @@ func (cs *CollectionSettings) get(collection string, key SettingKey) interface{}
}
func (cs *CollectionSettings) set(collection string, key SettingKey, value interface{}) {
cs.mutex.Lock()
defer cs.mutex.Unlock()
m := cs.settings[collection]
if m == nil {
m = make(map[SettingKey]interface{})
@ -68,7 +91,12 @@ func (cs *CollectionSettings) SetGarbageThreshold(collection string, gt string)
}
func (cs *CollectionSettings) GetReplicaPlacement(collection string) *ReplicaPlacement {
return cs.get(collection, keyReplicatePlacement).(*ReplicaPlacement)
v := cs.get(collection, keyReplicatePlacement)
if v == nil {
return nil
} else {
return v.(*ReplicaPlacement)
}
}
func (cs *CollectionSettings) SetReplicaPlacement(collection, t string) error {

29
go/storage/store.go

@ -80,6 +80,7 @@ type Store struct {
Port int
PublicUrl string
Locations []*DiskLocation
colSettings *CollectionSettings
dataCenter string //optional informaton, overwriting master setting if exists
rack string //optional information, overwriting master setting if exists
volumeSizeLimit uint64 //read from the master
@ -304,6 +305,10 @@ func (s *Store) SendHeartbeatToMaster(callback SettingChanged) error {
if callback != nil {
callback(ret)
}
if len(ret.CollectionSettings) > 0 {
cs := NewCollectionSettingsFromPbMessage(ret.CollectionSettings)
s.SetCollectionSettings(cs)
}
}
return nil
}
@ -404,3 +409,27 @@ func (s *Store) SetJoinKey(k string) {
func (s *Store) GetMaster() string {
return s.masterNodes.GetMaster()
}
func (s *Store) GetCollectionSettings() *CollectionSettings {
s.mutex.RLock()
defer s.mutex.RUnlock()
return s.colSettings
}
func (s *Store) SetCollectionSettings(cs *CollectionSettings) {
s.mutex.Lock()
defer s.mutex.Unlock()
s.colSettings = cs
}
func (s *Store) GetVolumeReplicaPlacement(volumeId VolumeId) *ReplicaPlacement {
cs := s.GetCollectionSettings()
if cs == nil {
return nil
}
collection := ""
if v := s.GetVolume(volumeId); v != nil {
collection = v.Collection
}
return cs.GetReplicaPlacement(collection)
}

32
go/topology/store_replicate.go

@ -5,22 +5,27 @@ import (
"net/http"
"strconv"
"net"
"net/url"
"github.com/chrislusf/seaweedfs/go/glog"
"github.com/chrislusf/seaweedfs/go/operation"
"github.com/chrislusf/seaweedfs/go/security"
"github.com/chrislusf/seaweedfs/go/storage"
"github.com/chrislusf/seaweedfs/go/util"
"net"
"net/url"
)
func ReplicatedWrite(masterNode string, s *storage.Store,
volumeId storage.VolumeId, needle *storage.Needle,
r *http.Request) (size uint32, errorStatus string) {
//check JWT
jwt := security.GetJwt(r)
defer func() {
if errorStatus == "" {
return
}
ReplicatedDelete(masterNode, s, volumeId, needle, r)
}()
ret, err := s.Write(volumeId, needle)
if err != nil {
errorStatus = "Failed to write to local disk (" + err.Error() + ")"
@ -29,7 +34,7 @@ func ReplicatedWrite(masterNode string, s *storage.Store,
}
//send to other replica locations
if r.FormValue("type") != "replicate" {
if !distributedOperation(masterNode, s, volumeId, func(location operation.Location) bool {
repWrite := func(location operation.Location) bool {
args := url.Values{
"type": {"replicate"},
}
@ -46,7 +51,8 @@ func ReplicatedWrite(masterNode string, s *storage.Store,
string(needle.Name), bytes.NewReader(needle.Data), needle.IsGzipped(), string(needle.Mime),
jwt)
return err == nil
}) {
}
if !distributedOperation(masterNode, s, volumeId, repWrite) {
ret = 0
errorStatus = "Failed to write to replicas for volume " + volumeId.String()
}
@ -100,14 +106,12 @@ func distributedOperation(masterNode string, store *storage.Store, volumeId stor
for i := 0; i < length; i++ {
ret = ret && <-results
}
// we shouldn't check ReplicaPlacement because the needle have been written in head volume
// if volume := store.GetVolume(volumeId); volume != nil {
// if length+1 < volume.ReplicaPlacement.GetCopyCount() {
// glog.V(0).Infof("replicating opetations [%d] is less than volume's replication copy count [%d]", length+1, volume.ReplicaPlacement.GetCopyCount())
// ret = false
// }
// }
if rp := store.GetVolumeReplicaPlacement(volumeId); rp != nil {
if length+1 < rp.GetCopyCount() {
glog.V(0).Infof("replicating opetations [%d] is less than volume's replication copy count [%d]", length+1, rp.GetCopyCount())
ret = false
}
}
return ret
} else {
glog.V(0).Infoln("Failed to lookup for", volumeId, lookupErr.Error())

8
go/topology/topology_event_handling.go

@ -8,7 +8,7 @@ import (
"github.com/chrislusf/seaweedfs/go/storage"
)
func (t *Topology) StartRefreshWritableVolumes(garbageThreshold string) {
func (t *Topology) StartRefreshWritableVolumes() {
go func() {
for {
if t.IsLeader() {
@ -18,15 +18,15 @@ func (t *Topology) StartRefreshWritableVolumes(garbageThreshold string) {
time.Sleep(time.Duration(float32(t.pulse*1e3)*(1+rand.Float32())) * time.Millisecond)
}
}()
go func(garbageThreshold string) {
go func() {
c := time.Tick(15 * time.Minute)
if t.IsLeader() {
for range c {
t.Vacuum(garbageThreshold)
t.Vacuum("")
// t.CheckReplicate()
}
}
}(garbageThreshold)
}()
go func() {
for {
select {

6
go/topology/topology_vacuum.go

@ -83,6 +83,10 @@ func (t *Topology) Vacuum(garbageThreshold string) int {
glog.V(0).Infoln("Start vacuum on demand")
for item := range t.collectionMap.IterItems() {
c := item.Value.(*Collection)
gcThreshold := garbageThreshold
if gcThreshold == "" {
gcThreshold = t.CollectionSettings.GetGarbageThreshold(c.Name)
}
glog.V(0).Infoln("vacuum on collection:", c.Name)
for item1 := range c.storageType2VolumeLayout.IterItems() {
if item1.Value == nil {
@ -95,7 +99,7 @@ func (t *Topology) Vacuum(garbageThreshold string) int {
continue
}
glog.V(0).Infoln("vacuum on collection:", c.Name, "volume", vid)
if batchVacuumVolumeCheck(volumeLayout, vid, locationList, garbageThreshold) {
if batchVacuumVolumeCheck(volumeLayout, vid, locationList, gcThreshold) {
if batchVacuumVolumeCompact(volumeLayout, vid, locationList) {
batchVacuumVolumeCommit(volumeLayout, vid, locationList)
}

2
go/weed/weed_server/master_server.go

@ -81,7 +81,7 @@ func NewMasterServer(r *mux.Router, port int, metaFolder string,
r.HandleFunc("/stats/counter", ms.guard.WhiteList(statsCounterHandler))
r.HandleFunc("/stats/memory", ms.guard.WhiteList(statsMemoryHandler))
ms.Topo.StartRefreshWritableVolumes(garbageThreshold)
ms.Topo.StartRefreshWritableVolumes()
return ms
}

1
go/weed/weed_server/master_server_handlers_admin.go

@ -107,6 +107,7 @@ func (ms *MasterServer) dirJoin2Handler(w http.ResponseWriter, r *http.Request)
joinResp.JoinIp = joinMsgV2.Ip
joinResp.VolumeSizeLimit = ms.Topo.GetVolumeSizeLimit()
joinResp.SecretKey = string(ms.guard.GetSecretKey())
joinResp.CollectionSettings = ms.Topo.CollectionSettings.ToPbMessage()
}
writeObjResponse(w, r, http.StatusOK, joinResp)
}

85
go/weedpb/system_message.pb.go

@ -99,8 +99,9 @@ func (m *JoinMessageV2) GetVolumes() []*VolumeInformationMessage {
}
type CollectionSetting struct {
Collection string `protobuf:"bytes,1,opt,name=collection" json:"collection,omitempty"`
ReplicaPlacement string `protobuf:"bytes,2,opt,name=replica_placement,json=replicaPlacement" json:"replica_placement,omitempty"`
Collection string `protobuf:"bytes,1,opt,name=collection" json:"collection,omitempty"`
ReplicaPlacement string `protobuf:"bytes,2,opt,name=replica_placement,json=replicaPlacement" json:"replica_placement,omitempty"`
VacuumGarbageThreshold string `protobuf:"bytes,3,opt,name=vacuum_garbage_threshold,json=vacuumGarbageThreshold" json:"vacuum_garbage_threshold,omitempty"`
}
func (m *CollectionSetting) Reset() { *m = CollectionSetting{} }
@ -138,43 +139,45 @@ func init() {
}
var fileDescriptor0 = []byte{
// 593 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe4, 0x94, 0x5d, 0x6e, 0xd3, 0x40,
0x10, 0xc7, 0x15, 0xb7, 0x4d, 0xe2, 0x49, 0x53, 0xd2, 0xa5, 0x12, 0xae, 0x10, 0x50, 0xf2, 0x54,
0x01, 0x2a, 0x52, 0x79, 0xe3, 0xb1, 0x95, 0x90, 0x5a, 0x40, 0x54, 0x5b, 0xd1, 0x57, 0xe3, 0xd8,
0xd3, 0x6a, 0xa9, 0xed, 0xb5, 0x76, 0x37, 0x05, 0x73, 0x24, 0xee, 0x81, 0xc4, 0x6d, 0xb8, 0x02,
0xb3, 0xb3, 0x71, 0xe8, 0x07, 0x9c, 0x80, 0xb7, 0x99, 0xff, 0xcc, 0xda, 0x33, 0xbf, 0xd9, 0x59,
0xd8, 0xb2, 0xad, 0x75, 0x58, 0xa5, 0x15, 0x5a, 0x9b, 0x5d, 0xe0, 0x5e, 0x63, 0xb4, 0xd3, 0xa2,
0xff, 0x05, 0xb1, 0x68, 0x66, 0xd3, 0x9f, 0x11, 0x24, 0x67, 0xba, 0x9c, 0x57, 0x78, 0x54, 0x9f,
0x6b, 0x53, 0x65, 0x4e, 0xe9, 0xfa, 0x7d, 0x48, 0x15, 0x1b, 0x10, 0xa9, 0x22, 0xe9, 0xed, 0xf4,
0x76, 0xc7, 0x92, 0x2c, 0x21, 0x60, 0xd5, 0xaa, 0x6f, 0x98, 0x44, 0xa4, 0xac, 0x4a, 0xb6, 0xc5,
0x63, 0x80, 0x5c, 0x97, 0x25, 0xe6, 0xfe, 0x60, 0xb2, 0x42, 0x91, 0x58, 0x5e, 0x53, 0xc4, 0x23,
0x80, 0x73, 0x55, 0x62, 0x9a, 0xeb, 0x79, 0xed, 0x92, 0x55, 0x3e, 0x19, 0x7b, 0xe5, 0xd0, 0x0b,
0xe2, 0x29, 0xac, 0x17, 0x58, 0xa2, 0xeb, 0x12, 0xd6, 0x38, 0x61, 0x14, 0xb4, 0x90, 0xf2, 0x02,
0x44, 0x70, 0x8b, 0x74, 0xd6, 0x2e, 0x13, 0xfb, 0x9c, 0x38, 0x59, 0x44, 0x0e, 0xda, 0x2e, 0xfb,
0x21, 0xc4, 0x06, 0xb3, 0x22, 0xd5, 0x75, 0xd9, 0x26, 0x03, 0x4a, 0x1a, 0xca, 0xa1, 0x17, 0x3e,
0x90, 0x2f, 0x5e, 0xc2, 0xa6, 0xc1, 0xa6, 0x54, 0x79, 0x96, 0x36, 0x65, 0x96, 0x63, 0x85, 0xf4,
0xa5, 0xa1, 0xef, 0xef, 0x20, 0x4a, 0x7a, 0x72, 0xb2, 0x08, 0x9e, 0x74, 0x31, 0x91, 0xc0, 0xe0,
0x0a, 0x8d, 0xf5, 0xad, 0xc5, 0x8c, 0xa1, 0x73, 0xc5, 0x04, 0x56, 0x9c, 0x2b, 0x13, 0x60, 0xd5,
0x9b, 0xd3, 0x1f, 0x11, 0x8c, 0x8e, 0xb5, 0x5a, 0xd2, 0x7b, 0x00, 0x03, 0x65, 0x53, 0x55, 0x2b,
0xc7, 0x08, 0x87, 0xb2, 0xaf, 0xec, 0x11, 0x79, 0x8c, 0xb5, 0x61, 0x88, 0x31, 0x61, 0x6d, 0x3c,
0xd6, 0x46, 0x1b, 0xc7, 0xf0, 0xc6, 0x92, 0x6d, 0x8f, 0xad, 0x99, 0xcf, 0xa8, 0x98, 0x74, 0x6e,
0x4a, 0xc6, 0x16, 0xcb, 0x38, 0x28, 0x1f, 0x4d, 0x29, 0x76, 0x61, 0x52, 0x65, 0x5f, 0xd3, 0x2b,
0x9e, 0xdc, 0x35, 0x74, 0x63, 0xb9, 0x41, 0x7a, 0x18, 0x68, 0xe0, 0xb1, 0x03, 0xeb, 0x3e, 0x93,
0x67, 0x70, 0x89, 0xed, 0x82, 0x1b, 0x90, 0xf6, 0x86, 0xa4, 0xb7, 0xd8, 0x8a, 0x27, 0x30, 0x2a,
0x32, 0x97, 0xa5, 0x39, 0x35, 0x8c, 0x86, 0x99, 0xd1, 0x08, 0xbd, 0x74, 0xc8, 0x8a, 0xaf, 0xcf,
0x64, 0xf9, 0x25, 0x83, 0x8a, 0x25, 0xdb, 0xe2, 0x35, 0x81, 0xe1, 0xbf, 0x58, 0x02, 0xb3, 0xb2,
0x3b, 0xda, 0xdf, 0xd9, 0x0b, 0x37, 0x6a, 0xef, 0x5f, 0xb7, 0x49, 0x76, 0x07, 0x7c, 0x6f, 0x59,
0x51, 0xa9, 0x3a, 0xe5, 0xae, 0x03, 0xc1, 0x98, 0x95, 0x13, 0x12, 0xa6, 0xdf, 0x23, 0x18, 0x5f,
0xe3, 0x78, 0xb6, 0x2f, 0xb6, 0x61, 0xf8, 0x99, 0x04, 0xae, 0xbf, 0xc7, 0x45, 0x0c, 0xbc, 0xef,
0x8b, 0xff, 0xcf, 0x59, 0x4e, 0x3f, 0xc1, 0xe6, 0xe1, 0x72, 0xd9, 0x4e, 0xd1, 0x39, 0x55, 0x5f,
0xdc, 0xda, 0xc9, 0xde, 0x9d, 0x9d, 0x7c, 0xfe, 0xb7, 0x35, 0x08, 0x0c, 0xef, 0xac, 0xc0, 0xf4,
0x57, 0x0f, 0xd6, 0xfd, 0x38, 0x24, 0xda, 0x46, 0xd7, 0x16, 0xc5, 0x16, 0xac, 0xa1, 0x31, 0xda,
0x2c, 0x3e, 0x1c, 0x9c, 0x1b, 0x33, 0x8a, 0x6e, 0xce, 0x88, 0x16, 0x81, 0x43, 0x34, 0xa8, 0xf0,
0x3e, 0xf4, 0xbd, 0x7b, 0xd4, 0x88, 0x67, 0xb0, 0xb9, 0xa0, 0xee, 0x9f, 0x92, 0xb4, 0x54, 0x95,
0xea, 0x9e, 0x88, 0x7b, 0x21, 0x70, 0x4a, 0xfa, 0x3b, 0x2f, 0x8b, 0x63, 0xb8, 0xff, 0xa7, 0x83,
0xd4, 0x86, 0x4e, 0x2d, 0x0d, 0xca, 0x03, 0xdb, 0xee, 0x80, 0xdd, 0x61, 0x21, 0x45, 0x7e, 0x5b,
0xe2, 0x0b, 0x68, 0x31, 0x37, 0xe8, 0x96, 0x53, 0xa4, 0x0b, 0x11, 0x14, 0xaa, 0x77, 0xd6, 0xe7,
0x27, 0xf2, 0xd5, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x7d, 0xe0, 0x05, 0x3a, 0x05, 0x00,
0x00,
// 627 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe4, 0x94, 0xe1, 0x4e, 0xd4, 0x40,
0x10, 0xc7, 0xd3, 0x02, 0x77, 0xd7, 0x39, 0x0e, 0x8f, 0x95, 0x68, 0x89, 0x51, 0xf1, 0x3e, 0x11,
0x35, 0x98, 0xe0, 0x17, 0xe3, 0x47, 0x48, 0x34, 0xa0, 0x46, 0x52, 0x94, 0xaf, 0x9b, 0x5e, 0x3b,
0xc0, 0xca, 0xb6, 0xdb, 0xec, 0xee, 0xa1, 0xe7, 0xa3, 0xf8, 0x08, 0xbe, 0x87, 0x89, 0x6f, 0xe3,
0x2b, 0xb8, 0x3b, 0x7b, 0x3d, 0x81, 0xd3, 0x27, 0xf0, 0xdb, 0xce, 0x7f, 0xa6, 0xdd, 0x99, 0xdf,
0xcc, 0x2c, 0x6c, 0x98, 0xa9, 0xb1, 0x58, 0xf1, 0x0a, 0x8d, 0xc9, 0xcf, 0x70, 0xa7, 0xd1, 0xca,
0x2a, 0xd6, 0xf9, 0x8c, 0x58, 0x36, 0xe3, 0xd1, 0xcf, 0x18, 0xd2, 0x13, 0x25, 0x27, 0x15, 0x1e,
0xd4, 0xa7, 0x4a, 0x57, 0xb9, 0x15, 0xaa, 0x7e, 0x17, 0x42, 0xd9, 0x1a, 0xc4, 0xa2, 0x4c, 0xa3,
0xad, 0x68, 0x7b, 0x90, 0xb9, 0x13, 0x63, 0xb0, 0x6c, 0xc4, 0x57, 0x4c, 0x63, 0xa7, 0x2c, 0x67,
0x74, 0x66, 0x0f, 0x00, 0x0a, 0x25, 0x25, 0x16, 0xfe, 0xc3, 0x74, 0xc9, 0x79, 0x92, 0xec, 0x8a,
0xc2, 0xee, 0x03, 0x9c, 0x0a, 0x89, 0xbc, 0x50, 0x93, 0xda, 0xa6, 0xcb, 0xf4, 0x65, 0xe2, 0x95,
0x7d, 0x2f, 0xb0, 0x47, 0xb0, 0x5a, 0xa2, 0x44, 0xdb, 0x06, 0xac, 0x50, 0x40, 0x3f, 0x68, 0x21,
0xe4, 0x29, 0xb0, 0x60, 0x96, 0x7c, 0x3c, 0x9d, 0x07, 0x76, 0x28, 0x70, 0x38, 0xf3, 0xec, 0x4d,
0xdb, 0xe8, 0x7b, 0x90, 0x68, 0xcc, 0x4b, 0xae, 0x6a, 0x39, 0x4d, 0xbb, 0x2e, 0xa8, 0x97, 0xf5,
0xbc, 0xf0, 0xde, 0xd9, 0xec, 0x19, 0xac, 0x6b, 0x6c, 0xa4, 0x28, 0x72, 0xde, 0xc8, 0xbc, 0xc0,
0x0a, 0xdd, 0x9f, 0x7a, 0xbe, 0xbe, 0xbd, 0x38, 0x8d, 0xb2, 0xe1, 0xcc, 0x79, 0xd4, 0xfa, 0x58,
0x0a, 0xdd, 0x4b, 0xd4, 0xc6, 0x97, 0x96, 0x10, 0x86, 0xd6, 0x64, 0x43, 0x58, 0xb2, 0x56, 0xa6,
0x40, 0xaa, 0x3f, 0x8e, 0x7e, 0xc4, 0xd0, 0x3f, 0x54, 0x62, 0x4e, 0xef, 0x2e, 0x74, 0x85, 0xe1,
0xa2, 0x16, 0x96, 0x10, 0xf6, 0xb2, 0x8e, 0x30, 0x07, 0xce, 0x22, 0xac, 0x0d, 0x41, 0x4c, 0x1c,
0xd6, 0xc6, 0x63, 0x6d, 0x94, 0xb6, 0x04, 0x6f, 0x90, 0xd1, 0xd9, 0x63, 0x6b, 0x26, 0x63, 0x97,
0x0c, 0x9f, 0x68, 0x49, 0xd8, 0x92, 0x2c, 0x09, 0xca, 0x47, 0x2d, 0xd9, 0x36, 0x0c, 0xab, 0xfc,
0x0b, 0xbf, 0xa4, 0xce, 0x5d, 0x41, 0x37, 0xc8, 0xd6, 0x9c, 0x1e, 0x1a, 0x1a, 0x78, 0x6c, 0xc1,
0xaa, 0x8f, 0xa4, 0x1e, 0x5c, 0xe0, 0x74, 0xc6, 0x0d, 0x9c, 0xf6, 0xca, 0x49, 0x6f, 0x70, 0xca,
0x1e, 0x42, 0xbf, 0xcc, 0x6d, 0xce, 0x0b, 0x57, 0x30, 0x6a, 0x62, 0xe6, 0x5a, 0xe8, 0xa5, 0x7d,
0x52, 0x7c, 0x7e, 0x3a, 0x2f, 0x2e, 0x08, 0x54, 0x92, 0xd1, 0x99, 0xbd, 0x74, 0x60, 0xe8, 0x16,
0xe3, 0xc0, 0x2c, 0x6d, 0xf7, 0x77, 0xb7, 0x76, 0xc2, 0x44, 0xed, 0xfc, 0x6b, 0x9a, 0xb2, 0xf6,
0x03, 0x5f, 0x5b, 0x5e, 0x56, 0xa2, 0xe6, 0x54, 0x75, 0x20, 0x98, 0x90, 0x72, 0xe4, 0x84, 0xd1,
0xf7, 0x18, 0x06, 0x57, 0x38, 0x9e, 0xec, 0xb2, 0x4d, 0xe8, 0x7d, 0x72, 0x02, 0xe5, 0x1f, 0x51,
0x12, 0x5d, 0x6f, 0xfb, 0xe4, 0xff, 0x73, 0x96, 0xa3, 0x6f, 0x11, 0xac, 0xef, 0xcf, 0xb7, 0xed,
0x18, 0xad, 0x15, 0xf5, 0xd9, 0x8d, 0xa5, 0x8c, 0x16, 0x96, 0xf2, 0xc9, 0xdf, 0xf6, 0x20, 0x40,
0x5c, 0xdc, 0x81, 0x17, 0x90, 0x5e, 0xe6, 0xc5, 0x64, 0x52, 0xf1, 0xb3, 0x5c, 0x8f, 0xdd, 0xed,
0xdc, 0x9e, 0x6b, 0x34, 0xe7, 0x4a, 0x96, 0xb3, 0x7d, 0xbf, 0x13, 0xfc, 0xaf, 0x83, 0xfb, 0x43,
0xeb, 0x1d, 0xfd, 0x8a, 0x60, 0xd5, 0x77, 0x32, 0x43, 0xd3, 0xa8, 0xda, 0x20, 0xdb, 0x80, 0x15,
0xd4, 0x5a, 0xe9, 0x59, 0x4a, 0xc1, 0xb8, 0xd6, 0xde, 0xf8, 0x7a, 0x7b, 0xdd, 0x0e, 0x91, 0xcb,
0xf5, 0x38, 0x5c, 0xd5, 0xf1, 0xe6, 0x41, 0xc3, 0x1e, 0xc3, 0xfa, 0xac, 0x61, 0xfe, 0x15, 0xe2,
0x52, 0x54, 0xa2, 0x7d, 0x5d, 0x6e, 0x05, 0xc7, 0xb1, 0xd3, 0xdf, 0x7a, 0x99, 0x1d, 0xc2, 0xed,
0x3f, 0xb5, 0x73, 0x13, 0x18, 0x19, 0xd7, 0x63, 0xcf, 0x7a, 0xb3, 0x65, 0xbd, 0x40, 0x31, 0x63,
0xc5, 0x4d, 0x89, 0x66, 0xd7, 0x60, 0xa1, 0xd1, 0xce, 0x07, 0xc0, 0xcd, 0x52, 0x50, 0x5c, 0xbe,
0xe3, 0x0e, 0xbd, 0xae, 0xcf, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x13, 0x29, 0xcf, 0xb8, 0x75,
0x05, 0x00, 0x00,
}

2
go/weedpb/system_message.proto

@ -44,7 +44,7 @@ message JoinMessageV2 {
message CollectionSetting {
string collection = 1;
string replica_placement = 2;
// float vacuum_garbage_threshold = 3;
string vacuum_garbage_threshold = 3;
}
message JoinResponse {

Loading…
Cancel
Save