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. 81
      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 package storage
import "sync"
import "github.com/chrislusf/seaweedfs/go/weedpb"
type SettingKey int type SettingKey int
@ -11,7 +11,6 @@ const (
type CollectionSettings struct { type CollectionSettings struct {
settings map[string]map[SettingKey]interface{} settings map[string]map[SettingKey]interface{}
mutex sync.RWMutex
} }
func NewCollectionSettings(defaultReplicatePlacement, defaultGarbageThreshold string) *CollectionSettings { func NewCollectionSettings(defaultReplicatePlacement, defaultGarbageThreshold string) *CollectionSettings {
@ -27,9 +26,35 @@ func NewCollectionSettings(defaultReplicatePlacement, defaultGarbageThreshold st
return c 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{} { func (cs *CollectionSettings) get(collection string, key SettingKey) interface{} {
cs.mutex.RLock()
defer cs.mutex.RUnlock()
if m, ok := cs.settings[collection]; ok { if m, ok := cs.settings[collection]; ok {
if v, ok := m[key]; ok { if v, ok := m[key]; ok {
return v 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{}) { func (cs *CollectionSettings) set(collection string, key SettingKey, value interface{}) {
cs.mutex.Lock()
defer cs.mutex.Unlock()
m := cs.settings[collection] m := cs.settings[collection]
if m == nil { if m == nil {
m = make(map[SettingKey]interface{}) m = make(map[SettingKey]interface{})
@ -68,7 +91,12 @@ func (cs *CollectionSettings) SetGarbageThreshold(collection string, gt string)
} }
func (cs *CollectionSettings) GetReplicaPlacement(collection string) *ReplicaPlacement { 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 { func (cs *CollectionSettings) SetReplicaPlacement(collection, t string) error {

29
go/storage/store.go

@ -80,6 +80,7 @@ type Store struct {
Port int Port int
PublicUrl string PublicUrl string
Locations []*DiskLocation Locations []*DiskLocation
colSettings *CollectionSettings
dataCenter string //optional informaton, overwriting master setting if exists dataCenter string //optional informaton, overwriting master setting if exists
rack string //optional information, overwriting master setting if exists rack string //optional information, overwriting master setting if exists
volumeSizeLimit uint64 //read from the master volumeSizeLimit uint64 //read from the master
@ -304,6 +305,10 @@ func (s *Store) SendHeartbeatToMaster(callback SettingChanged) error {
if callback != nil { if callback != nil {
callback(ret) callback(ret)
} }
if len(ret.CollectionSettings) > 0 {
cs := NewCollectionSettingsFromPbMessage(ret.CollectionSettings)
s.SetCollectionSettings(cs)
}
} }
return nil return nil
} }
@ -404,3 +409,27 @@ func (s *Store) SetJoinKey(k string) {
func (s *Store) GetMaster() string { func (s *Store) GetMaster() string {
return s.masterNodes.GetMaster() 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" "net/http"
"strconv" "strconv"
"net"
"net/url"
"github.com/chrislusf/seaweedfs/go/glog" "github.com/chrislusf/seaweedfs/go/glog"
"github.com/chrislusf/seaweedfs/go/operation" "github.com/chrislusf/seaweedfs/go/operation"
"github.com/chrislusf/seaweedfs/go/security" "github.com/chrislusf/seaweedfs/go/security"
"github.com/chrislusf/seaweedfs/go/storage" "github.com/chrislusf/seaweedfs/go/storage"
"github.com/chrislusf/seaweedfs/go/util" "github.com/chrislusf/seaweedfs/go/util"
"net"
"net/url"
) )
func ReplicatedWrite(masterNode string, s *storage.Store, func ReplicatedWrite(masterNode string, s *storage.Store,
volumeId storage.VolumeId, needle *storage.Needle, volumeId storage.VolumeId, needle *storage.Needle,
r *http.Request) (size uint32, errorStatus string) { r *http.Request) (size uint32, errorStatus string) {
//check JWT //check JWT
jwt := security.GetJwt(r) jwt := security.GetJwt(r)
defer func() {
if errorStatus == "" {
return
}
ReplicatedDelete(masterNode, s, volumeId, needle, r)
}()
ret, err := s.Write(volumeId, needle) ret, err := s.Write(volumeId, needle)
if err != nil { if err != nil {
errorStatus = "Failed to write to local disk (" + err.Error() + ")" 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 //send to other replica locations
if r.FormValue("type") != "replicate" { if r.FormValue("type") != "replicate" {
if !distributedOperation(masterNode, s, volumeId, func(location operation.Location) bool {
repWrite := func(location operation.Location) bool {
args := url.Values{ args := url.Values{
"type": {"replicate"}, "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), string(needle.Name), bytes.NewReader(needle.Data), needle.IsGzipped(), string(needle.Mime),
jwt) jwt)
return err == nil return err == nil
}) {
}
if !distributedOperation(masterNode, s, volumeId, repWrite) {
ret = 0 ret = 0
errorStatus = "Failed to write to replicas for volume " + volumeId.String() 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++ { for i := 0; i < length; i++ {
ret = ret && <-results 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 return ret
} else { } else {
glog.V(0).Infoln("Failed to lookup for", volumeId, lookupErr.Error()) 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" "github.com/chrislusf/seaweedfs/go/storage"
) )
func (t *Topology) StartRefreshWritableVolumes(garbageThreshold string) {
func (t *Topology) StartRefreshWritableVolumes() {
go func() { go func() {
for { for {
if t.IsLeader() { 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) 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) c := time.Tick(15 * time.Minute)
if t.IsLeader() { if t.IsLeader() {
for range c { for range c {
t.Vacuum(garbageThreshold)
t.Vacuum("")
// t.CheckReplicate() // t.CheckReplicate()
} }
} }
}(garbageThreshold)
}()
go func() { go func() {
for { for {
select { 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") glog.V(0).Infoln("Start vacuum on demand")
for item := range t.collectionMap.IterItems() { for item := range t.collectionMap.IterItems() {
c := item.Value.(*Collection) c := item.Value.(*Collection)
gcThreshold := garbageThreshold
if gcThreshold == "" {
gcThreshold = t.CollectionSettings.GetGarbageThreshold(c.Name)
}
glog.V(0).Infoln("vacuum on collection:", c.Name) glog.V(0).Infoln("vacuum on collection:", c.Name)
for item1 := range c.storageType2VolumeLayout.IterItems() { for item1 := range c.storageType2VolumeLayout.IterItems() {
if item1.Value == nil { if item1.Value == nil {
@ -95,7 +99,7 @@ func (t *Topology) Vacuum(garbageThreshold string) int {
continue continue
} }
glog.V(0).Infoln("vacuum on collection:", c.Name, "volume", vid) 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) { if batchVacuumVolumeCompact(volumeLayout, vid, locationList) {
batchVacuumVolumeCommit(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/counter", ms.guard.WhiteList(statsCounterHandler))
r.HandleFunc("/stats/memory", ms.guard.WhiteList(statsMemoryHandler)) r.HandleFunc("/stats/memory", ms.guard.WhiteList(statsMemoryHandler))
ms.Topo.StartRefreshWritableVolumes(garbageThreshold)
ms.Topo.StartRefreshWritableVolumes()
return ms 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.JoinIp = joinMsgV2.Ip
joinResp.VolumeSizeLimit = ms.Topo.GetVolumeSizeLimit() joinResp.VolumeSizeLimit = ms.Topo.GetVolumeSizeLimit()
joinResp.SecretKey = string(ms.guard.GetSecretKey()) joinResp.SecretKey = string(ms.guard.GetSecretKey())
joinResp.CollectionSettings = ms.Topo.CollectionSettings.ToPbMessage()
} }
writeObjResponse(w, r, http.StatusOK, joinResp) writeObjResponse(w, r, http.StatusOK, joinResp)
} }

81
go/weedpb/system_message.pb.go

@ -101,6 +101,7 @@ func (m *JoinMessageV2) GetVolumes() []*VolumeInformationMessage {
type CollectionSetting struct { type CollectionSetting struct {
Collection string `protobuf:"bytes,1,opt,name=collection" json:"collection,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"` 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{} } func (m *CollectionSetting) Reset() { *m = CollectionSetting{} }
@ -138,43 +139,45 @@ func init() {
} }
var fileDescriptor0 = []byte{ 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 { message CollectionSetting {
string collection = 1; string collection = 1;
string replica_placement = 2; string replica_placement = 2;
// float vacuum_garbage_threshold = 3;
string vacuum_garbage_threshold = 3;
} }
message JoinResponse { message JoinResponse {

Loading…
Cancel
Save