Archived
1 parent
bc885f1d08
commit
e8a679c280
7 files changed
+98
-13
No files matched your search
+1
-1
@@ -73,7 +73,7 @@ func init() {
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["favicon.png"] = bs
|
||||
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7dfb7bdc36aee8effd2b186ddbd87bad193b49d37b5ddb7bfd48b7ee23c9673bdbd3d3af673f8ec499612c890a49d99975bd7ffb0148bd1f238dc749bcbbfd21f148a2400004400024a1bd4727af8e2f7e79fd82cc75181c7cb6f7c8753f1b8fc9b1881792cfe69a6c1c6f9227db3bcfc8f7f4524cc891903342231f5a445af249a2855464433146f49c91e3572f2fce4e8fde5cbc3a3b27531eb0cd11823b0c0262c029229962f28af923f2463122a6f01a574489447a8c78c267042e67e28ac988f964b280cec84fa717aed28b8021ac807b2c52d81dd5c483a71346a6220194786470f8f1f4f8c5cbf317a6fbd167ae0b54217124a0d16cdf619143a2994be378df518bc883eea399b9e52145220898dc77ceb327c75a060ef102aad4be838d02412f1d04c9a87ff019217b21d39478732a15d3fb4ea2a7eeff758a0773ad6397bd4bf8d5bef35fee9b43f7588431d57c1230000b3db208de3a7db1cffc192bbd17d190ed3b579c5dc742ea52d36beeebf9becfae800daeb9d802c2b9e63470954703b6bf33da6e00f299f2248f3517510956a3194df45cc8468b804797307001700c1e6b2fd1847b08692ed974df99d22bbc1cc5c0c883cff005cd75c00e722692dfc9cd0d8ef34b18df97d0d3c6e6ededded8b6ca3bb0c0264268a5258dc79e52e3fc6a14f26804779c140f940635674c3b75001278704d174b1a9b6ba2173150acd97b8d3d9927844c84bf2037e6272131f57dc0de9d08ad45b84bbede8edf7f933e9b0287dc290d79b0d825ce772cb8629a7b94bc640973b6487e638b1c4a189a2da268a45c107d3eb5206e3f337fe63b5b64fe04fe3d857fcfe0df5779f7d52ece2c59007b8dde92e0ff943a08a99cf1c8d522de253ba3af5858693b42d6b8a188848a29e8662b5a3fb128105be42711510ffe825150027405903c068de64c028ad780610ea6d605053d40c5f351a5fd036db44acb0394eae6531c9deea7539095eea739647f29e4d6a739643fe7c244489f49cbbb484435ba0231133536ef92ed6faa7255ba63c0b85f15e2150bc55159775182c15c5cd53be04abb91702709d82b9d77656e1bf17651bc2d6ab51781b02009a3fc1d9fab38a030963c022d62ee2410de658607689d353220fd997ce482632c3a884ef16042bdcb9944638cbd0809e8cf261b4f9e3edf224f9e6de37f3b9bdf543928a9cf13b54b9e9688cff8b313bf27cf8afb19239fc0ed27d9eddb3a5d2066d1c8a760d36a721eb02960bb5d087a85bc9dede2b6917c1af019f21f89fca69f571983b339a2c95f1c0bf2888768d069a45b3401a6affcb5eb39d7cc353a83af5e830dacd89e6b66b9ff6c7bbb1592df306396fe2760c4fab0f0472aa441e056b8d88950faf2ff0f99cf29d908e9fb94a75f3fff3a7ebf990348f50a1c8018cc0488f481bd53d6bebc3121e33f83ec831ba00925f934406092d538a3b0d16cb49bb7257f06a648b0321398f3493c074e2b502a0244886b824335918c5e2a74110201af4b164b01ef04208263059337f81ad75ccfcb10ad3ca911f9f338bf5d6382043665a3729b8be3ded8a820380963eb257cb66728c4473ebfaafb1a2fae60aa357ec6c1de189edb29141c31722162502949d087c17b11bdca5d117a854fec1f3443d94f9f4d691280c700e09969c767d4ccfb76863318a440100b0acc91e9339c1b417baa7db81309fe1ee0c6c359f604ed9b4394f4ec4fd728ccf367c60320732399fbced3270eb1de8ab3b3f3b53306ea107ade555ceb07819039f7c1eabaef61426e7319e2fced2428bd9e115ffa69f436a7cbb808c8780e1e4212cfc0eab0d3682a4611bb2e916f1a824fab4594fa07f622f700273aca3ac09ff0af60b8753fac2b094eea65ded1c666b583328f67c1229ea3f744f25fae37675712fe26b193f1ec4b16aa5cff0b20a0129182f98115bfdc2b1a24f03f930a067ddfb9b929938b2d94bebd750eded8bb2063e4e68bb4f517b7d521321d8d2d0b4a9c1c07bccad794165f8ad817d751955a9a32e64f4ebd1d88ed6c867e30da99f4a20ca546e3c10b9f6b8be0bb2fa309f0636f924b3268b0466e4de01fadf45f084ade6fc8a2a482a421e32047b53c86603ccf582c700c7b076eeefbb511ab9370e8fb04c1c1ec2ee4226d8a185799da87112ac5208c802bd7cc72a6072b04d9874fce487ec57d549b15b086c9419f5be3ad06a1ee89590fda19b8bbb1910fe7e23b8981691f3673986a4e4f3e240fd53cd128c0839016d3692fc616dcddf807f3b8a6520f14c329349ff7e07366217e480ed2894886a10c33b7d42e0b63bde8d31e84b904e9bd7112b45bcfe2493af1e30f985eec6cdf3151dbf6e81e7ccba5d230cf5f6f1111050b02c1f97544f89444cc634a51b9f886a43c25d75446e837a5ae44e189e084f808e04ff9ec34c2883d37d300b8f00b2ac8046ee8bb3b4fcab36be939f08105c4fcefa6dd5667847a5be4b56f5aedcd9f96e6b44a1b932c70321981b092f9cc0707ebe941cebbee0ed0fdaa1bfcb834841773cc3d210f12699c2532a78a4c188370825e611e2ad1e0ee812bea412c066ff823526437c2048721450cbdceb491c946818351053d2a793195a1ef461fe3cf9a9732c04f41e74485651f85c4102ea69ed147d5e4ba0bd110a900b46dcadf3b2d8359bd51b92c5d149e735539d82c09c04f0659ae897e45c83378f862313d9b709a6ca0738db1d36601a155219e2fd30717c3e2d821dc477ea73d70a6966b46aa453737f8ca313ed8c05fa3d313f086cd10c225a3dac2c4e806fffe0868d77ccea55a5769072d4109db54afd6ccb87615cf0df810d058650e5d0c3e19e610ff54a137f306f12610f6398f7cf61e1dd206f8019e72d9e122964bc09bdbdb3e58851e94020e64a78220d09b5b769e6baa9382e1ad18361df11c887b3d67e07f27d16564bcd937f647d3c31e0e4b8128c60c483eb73fd682e5d1c89ae6f3f4573fb4060c30816d12d481834908f77444c8c6cd0dc27dcda407e24367ac24f25f6cb663b732e6dc6f95e876b44fa1f147c4b9eb492db0b1b760feabaa79dd7ea69a9fd99db2ca55b53cd35e92ab71a3b721f36abd613de9d3aee836f1547e85d4b2b0e9b5d2921b156867aace122ded4f65d7237c38ef9ffd60687b67be7cf628c502007b49c77e4e38a651d2c445c99ac1fb7e274de36ea2d6a7d726c85c11b3a887ee6f4dcb7b20f8844be621ffd6a23bf36c4388db825f534efe36e2d1150d7897f40c664bead5ba8acffaf8f2424ab1265bda69f89462310bc4a42f1cfe2bb4a1415bb2e33e983033d0bfe50153e47742836bba502f9370c2e4ed6dc37e730d18a6dd6f917f76003b5a68036cc2238ad277f4e9f83b17611f7b7f14de87e36e80c0ef89b906d603e2ad1788c47731ed1108da97ae7b0561dfaba909f5d66170777bda61a822086fed001c90ed6a0a485c63ec5bb8a55996a3398c0590b5Line truncated
|
||||
bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d6b77dc36b2e0f7fc0ab8ef249666c56ec9763cbb8aa4bbb2e44c9487ed23d9379bcdc9ce4193e86e44244103a4e41e45f3dbb7aac0f7a3c956cbb6eebdf9608b4dbcaa0a5585aa02503c7874fafae4ed2f6f5eb2451cf8475f1c3c729c2f261376a2a2a596f345ccb64eb6d993ddbd67ec7b7ea9a6ec85d273c6430f6a84b196d32456dab02d23048b17829dbc7ef5f6fcecc5bbb7afcf2fd84cfa627b8cdd1dfb3ea3ee0cd3c2087d25bc317b6704533368260d332ad1ae60aef204839f73752574283c365dc260eca7b3b78e8997bec0be7ce98ad0e0703c662e944e059ba904409221c1f0e3d9c9cb57172f69f8f1178e03582172cce7e1fc7024c2110be70e8fa2c39159862e0c1fcee9958b1829df17fa707491959cc4da1f31d7e7c61c8eb092aff8e508bb14dc3bfa82b18340c49cb90bae8d880f47493c73fee7a82858c471e488f789bc3a1cfd1fe7ddb173a28288c772ea0be816461421b43a7b7928bcb928b50b79200e4757525c474ac7a5aad7d28b17879eb8023238f463071097b1e4be635cee8bc3bdf16ea3234f1857cb28962a2cf5d5a8c69378a174a3862fc34b98381f2806c5b19bc44cbad8d3428bd9e168c6aff0e73802421e7d810d6219fbe2282722fb83dddce03cbf82f97d05236d6ddfde1e4c6cad7c00dbd954a9d8c49a4713d79849fe6b1cc8700c6f46291cc80d6621443caa77a08106d77cb9a232fd66f132028c63f121c691a884b1a9f296ec861e198bb8e701f4ce54c5b10af6d9df76a30fdfa46533a09033e381f497fb6cf49df0af442c5dce5e89448c7658fe62871d6b989a1d6678681c607d39b35ddc7e417f167b3b6cf104fe3d857fcfe0dfd7f9f0d521ce2d5ad0f706a325feff280d10703d97a113ab689fed8dbf1641a5ee1849e3042a5426e2209bad60fd24425fedb09f54c85df80b4ac128901500f204245a0a0d205e03847937b52138c8010a9e8722ed1dc52455b13e42ae6e96e2ec7497ce8057ba4bf39ebd953db796e63d7b3915a64a7b425bda852aace1e5abb9aa91799fed7e53e5abd21beac6f9ba60af481989c2ba8f1c0ceae2aa3e8034b1132a679a80be8af3a1e835b1b783ec6d41ab3504c4fc2408f3369e3491cf612e650852249ca9afdccb0c0e903aab6480fb33fec81987343ab04e5130e5eee55ca332c6519406f0e7d3ad274f9fefb027cf76f1bfbded6faa14d4dc9389d9674f4bc867f4d98b3eb067c5fb8c904fe0f593ecf56d1d2f60b370ec71d069353ef7c50ca0dd2d18bd82dede6ef19a389ffb728ef44724bfe9a75546e06c8d68d217e7823d92012a741ec62d9200cb57deec7a2163e190cc60d36bd08115dd732d2cf59fedeeb6f6e435d498c5ff0928b13e28bcb109b8ef3b152a76029436fedf81f024675b01ff90d2f46fcfff167dd8ce3b48e50a0c8008d404b0f4917d5396bebc326393bf02ef83191033cef26580c1221be38a22c6f3f17e5e97fd1588a241cb4c61cd67d102286d40a81820a1ae194ed5540b7e69d044f01534d722d20adaf8c08213038b37d81ad7325e947bb4fc64c6ecaf93fc758d081ac894cdca6dce8e07131241301226d64af8e28030c4224f5ed56d8d9757b0d4929d7174308172bb848221c6deaa08444a33b461f05dc8af7253845f6189fd836a287bf4c48c273e580cd0bda07a72ce69ddb72b1c419076825070208e4ecb706d04e9a98ee14c35d87b009b0ce65909eab71133dab58f0e09ccf3676401b00571e6e1e8e99311b3d6ca686fef6fa3096087bde74345b571b013b6901e685de7032cc86d264394b74efc52f30cf9d223c96d8e179908487809164212cd41eb88b370a6c6a1b82ea14f15c1a68d5598da07f6476e014ee3301b001fe15f41706b7e5853128cd4cb7ca0adedea00651acffd65b440eb89e54f8ebb10571afe26d128a3d9572230b9fc179d80488406d607513c3957dc4fe07fa10d4cfae1e8e6a68c2ed630f1edede8e89d7d0b3cc66ebe4c6b7f795b9d221a68624950a2e4c49755baa6b8785a459eba0eabd8f29430ff36aad703b69dcfd10e463d93fe28f752c3f1e8a527630be0fbafc229d0e3609a733248708cd49ac23f5e19bf60947cdc408449054842e32807b53c87a03ccf45a4700e7b276ee179b519aba370ec790cbb83d55de9655a1521ae12b50f22148a41100155ae85a54c0f54d8651f3c3921e595f4506cd6801a1687f8c22a6f33087457cd7bc0cebabb1b19e5702abed7e898f641b380a5e6ecf463d2d02c9218197810d06a36eb85d8767737fac13a1e731d0f64c319545ff4c0736e7bfc9814e453950c0319566e1d3b2288e2659ff4609f2b803e98247ebbf62c4ad2851f1f6079b1ab7dc7426deba379f0add4268675fe7a87a9d05f3270ceaf4326672c14ae3086ebe5372ca529bbe63a44bb2935250a4b0417c447d0ff4ccecf42f4d873350d1d1776410518df093c67ef4979752d95031d84cfe87f271db6ba22d4eb22ad3daa75b0785a5ad32a75285830ca7804dc4ae1090f0caca74739edba0740f3abaef0a3d214be5d60ec096990683296d8821b361502dc097e8571a82406730f4c51177c3168e18d5911dd08129c861430b43ad34a148d0203a3daf5b864c554a6be1b7cf43f6b56ca003b058d1313946d141681bb985a469f5492eb264483a57c90b699fc306a99ccea8bcacfd28fc272ae0a8798273ed8c9c0cb35d6af3079d61f362c966772a7d9161ad7e83b6d173db40ac4f355f2e0a05b1c8d98f490dee9085298d592914ad1cd0d3639c1822d7c1a9f9d82354c53083f058f6d9fe8dde0df1f01ec9acdb952ea2af5a02608619be8d5aa916957b1dc800e3e8f4c66d0456093610cf1df2af866d620be04c4fe22434f7c4083b4d1fd004bb96c70314b25a0cded6d5f5f851c941c0e24a70127d05d58725ec43c4e0a82b742d834c4f34e9ceb8500fb3b092f43b266dfd987a6853dbc2f03ac180940f9c23e6cd497cb43ab9a2fd2a7fede1a7d800a6ce3a00e182820dc3310635b3737d8ef1ba15d601f3e172596ff72bb1dbab521975e2b47b7837d06953f21cc5d2535c7c6be82f5af2ae675fd994a7ea677ca225795f24c7a592ec68dd186acabf58af5a04fbba0dbc053b909ab4561d3df26d69244a09da8711668692fd55d4558b8e85ffd606a7b57be7cf528f902d0f78a81bd1c710ca3a4818b923683f65e274e936ea436c7d706c81c1589b007ef6fa9e63d207c2ab570917e1be19d59b601f86dfeaf29257f1bcbf08afbb28b7b069325b56a1d23e77d7479a9b5da902ced387c4eb698fb6adae70eff1dea70bf2dd8711f449853efdf4a5f18f607e3fe355f9a57493015faf6b6a1bf650c10a6c3efb07f7574f662195367531972e4be179f8fbe0b15f491f747e57e3ceafad8f93d1197fa7a40b4757d95780e863d7cc5fbc275afc1ed7b3d23576f130277d7e71d8a2a04f7d64ec011dbad8680d435fabe85Line truncated
|
||||
gr, _ = gzip.NewReader(bytes.NewBuffer(bs))
|
||||
bs, _ = ioutil.ReadAll(gr)
|
||||
Assets["index.html"] = bs
|
||||
|
||||
+11
-3
@@ -274,6 +274,8 @@ func main() {
|
||||
cfgFile := filepath.Join(confDir, "config.xml")
|
||||
go saveConfigLoop(cfgFile)
|
||||
|
||||
var myName string
|
||||
|
||||
// Load the configuration file, if it exists.
|
||||
// If it does not, create a template.
|
||||
|
||||
@@ -285,9 +287,15 @@ func main() {
|
||||
l.Fatalln(err)
|
||||
}
|
||||
cf.Close()
|
||||
myCfg := cfg.GetNodeConfiguration(myID)
|
||||
if myCfg == nil || myCfg.Name == "" {
|
||||
myName, _ = os.Hostname()
|
||||
} else {
|
||||
myName = myCfg.Name
|
||||
}
|
||||
} else {
|
||||
l.Infoln("No config file; starting with empty defaults")
|
||||
name, _ := os.Hostname()
|
||||
myName, _ = os.Hostname()
|
||||
defaultRepo := filepath.Join(getHomeDir(), "Sync")
|
||||
|
||||
cfg, err = config.Load(nil, myID)
|
||||
@@ -302,7 +310,7 @@ func main() {
|
||||
{
|
||||
NodeID: myID,
|
||||
Addresses: []string{"dynamic"},
|
||||
Name: name,
|
||||
Name: myName,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -365,7 +373,7 @@ func main() {
|
||||
if err != nil {
|
||||
l.Fatalln("leveldb.OpenFile():", err)
|
||||
}
|
||||
m := model.NewModel(confDir, &cfg, "syncthing", Version, db)
|
||||
m := model.NewModel(confDir, &cfg, myName, "syncthing", Version, db)
|
||||
|
||||
nextRepo:
|
||||
for i, repo := range cfg.Repositories {
|
||||
|
||||
@@ -140,6 +140,15 @@ func (cfg *Configuration) NodeMap() map[protocol.NodeID]NodeConfiguration {
|
||||
return m
|
||||
}
|
||||
|
||||
func (cfg *Configuration) GetNodeConfiguration(nodeid protocol.NodeID) *NodeConfiguration {
|
||||
for i, node := range cfg.Nodes {
|
||||
if node.NodeID == nodeid {
|
||||
return &cfg.Nodes[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cfg *Configuration) RepoMap() map[string]RepositoryConfiguration {
|
||||
m := make(map[string]RepositoryConfiguration, len(cfg.Repositories))
|
||||
for _, r := range cfg.Repositories {
|
||||
|
||||
+2
-1
@@ -440,7 +440,8 @@
|
||||
<div class="form-group">
|
||||
<label translate for="name">Node Name</label>
|
||||
<input placeholder="Home Server" id="name" class="form-control" type="text" ng-model="currentNode.Name"></input>
|
||||
<p translate class="help-block">Shown instead of Node ID in the cluster status.</p>
|
||||
<p translate ng-if="currentNode.NodeID == myID" class="help-block">Shown instead of Node ID in the cluster status. Will advertised to other nodes as an optional default name.</p>
|
||||
<p translate ng-if="currentNode.NodeID != myID" class="help-block">Shown instead of Node ID in the cluster status. Will be updated to the name the node advertises if left empty.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label translate for="addresses">Addresses</label>
|
||||
|
||||
+17
-1
@@ -68,6 +68,7 @@ type Model struct {
|
||||
cfg *config.Configuration
|
||||
db *leveldb.DB
|
||||
|
||||
nodeName string
|
||||
clientName string
|
||||
clientVersion string
|
||||
|
||||
@@ -101,11 +102,12 @@ var (
|
||||
// NewModel creates and starts a new model. The model starts in read-only mode,
|
||||
// where it sends index information to connected peers and responds to requests
|
||||
// for file data without altering the local repository in any way.
|
||||
func NewModel(indexDir string, cfg *config.Configuration, clientName, clientVersion string, db *leveldb.DB) *Model {
|
||||
func NewModel(indexDir string, cfg *config.Configuration, nodeName, clientName, clientVersion string, db *leveldb.DB) *Model {
|
||||
m := &Model{
|
||||
indexDir: indexDir,
|
||||
cfg: cfg,
|
||||
db: db,
|
||||
nodeName: nodeName,
|
||||
clientName: clientName,
|
||||
clientVersion: clientVersion,
|
||||
repoCfgs: make(map[string]config.RepositoryConfiguration),
|
||||
@@ -406,6 +408,14 @@ func (m *Model) ClusterConfig(nodeID protocol.NodeID, config protocol.ClusterCon
|
||||
} else {
|
||||
m.nodeVer[nodeID] = config.ClientName + " " + config.ClientVersion
|
||||
}
|
||||
name := config.GetOption("name")
|
||||
if name != "" {
|
||||
node := m.cfg.GetNodeConfiguration(nodeID)
|
||||
if node != nil && node.Name == "" {
|
||||
l.Infof("Node %s is called %q", nodeID, name)
|
||||
node.Name = name
|
||||
}
|
||||
}
|
||||
m.pmut.Unlock()
|
||||
|
||||
l.Infof(`Node %s client is "%s %s"`, nodeID, config.ClientName, config.ClientVersion)
|
||||
@@ -838,6 +848,12 @@ func (m *Model) clusterConfig(node protocol.NodeID) protocol.ClusterConfigMessag
|
||||
cm := protocol.ClusterConfigMessage{
|
||||
ClientName: m.clientName,
|
||||
ClientVersion: m.clientVersion,
|
||||
Options: []protocol.Option{
|
||||
{
|
||||
Key: "name",
|
||||
Value: m.nodeName,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
m.rmut.RLock()
|
||||
|
||||
+49
-7
@@ -57,7 +57,7 @@ func init() {
|
||||
|
||||
func TestRequest(t *testing.T) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", &config.Configuration{}, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", &config.Configuration{}, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
|
||||
@@ -94,7 +94,7 @@ func genFiles(n int) []protocol.FileInfo {
|
||||
|
||||
func BenchmarkIndex10000(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
files := genFiles(10000)
|
||||
@@ -107,7 +107,7 @@ func BenchmarkIndex10000(b *testing.B) {
|
||||
|
||||
func BenchmarkIndex00100(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
files := genFiles(100)
|
||||
@@ -120,7 +120,7 @@ func BenchmarkIndex00100(b *testing.B) {
|
||||
|
||||
func BenchmarkIndexUpdate10000f10000(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
files := genFiles(10000)
|
||||
@@ -134,7 +134,7 @@ func BenchmarkIndexUpdate10000f10000(b *testing.B) {
|
||||
|
||||
func BenchmarkIndexUpdate10000f00100(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
files := genFiles(10000)
|
||||
@@ -149,7 +149,7 @@ func BenchmarkIndexUpdate10000f00100(b *testing.B) {
|
||||
|
||||
func BenchmarkIndexUpdate10000f00001(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
files := genFiles(10000)
|
||||
@@ -207,7 +207,7 @@ func (FakeConnection) Statistics() protocol.Statistics {
|
||||
|
||||
func BenchmarkRequest(b *testing.B) {
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", nil, "syncthing", "dev", db)
|
||||
m := NewModel("/tmp", nil, "node", "syncthing", "dev", db)
|
||||
m.AddRepo(config.RepositoryConfiguration{ID: "default", Directory: "testdata"})
|
||||
m.ScanRepo("default")
|
||||
|
||||
@@ -259,3 +259,45 @@ func TestActivityMap(t *testing.T) {
|
||||
t.Errorf("Incorrect least busy node %q", node)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNodeRename(t *testing.T) {
|
||||
ccm := protocol.ClusterConfigMessage{
|
||||
ClientName: "syncthing",
|
||||
ClientVersion: "v0.9.4",
|
||||
}
|
||||
|
||||
cfg, _ := config.Load(nil, node1)
|
||||
cfg.Nodes = []config.NodeConfiguration{
|
||||
{
|
||||
NodeID: node1,
|
||||
},
|
||||
}
|
||||
|
||||
db, _ := leveldb.Open(storage.NewMemStorage(), nil)
|
||||
m := NewModel("/tmp", &cfg, "node", "syncthing", "dev", db)
|
||||
if cfg.Nodes[0].Name != "" {
|
||||
t.Errorf("Node already has a name")
|
||||
}
|
||||
|
||||
m.ClusterConfig(node1, ccm)
|
||||
if cfg.Nodes[0].Name != "" {
|
||||
t.Errorf("Node already has a name")
|
||||
}
|
||||
|
||||
ccm.Options = []protocol.Option{
|
||||
{
|
||||
Key: "name",
|
||||
Value: "tester",
|
||||
},
|
||||
}
|
||||
m.ClusterConfig(node1, ccm)
|
||||
if cfg.Nodes[0].Name != "tester" {
|
||||
t.Errorf("Node did not get a name")
|
||||
}
|
||||
|
||||
ccm.Options[0].Value = "tester2"
|
||||
m.ClusterConfig(node1, ccm)
|
||||
if cfg.Nodes[0].Name != "tester" {
|
||||
t.Errorf("Node name got overwritten")
|
||||
}
|
||||
}
|
||||
@@ -98,6 +98,15 @@ type ClusterConfigMessage struct {
|
||||
Options []Option // max:64
|
||||
}
|
||||
|
||||
func (o *ClusterConfigMessage) GetOption(key string) string {
|
||||
for _, option := range o.Options {
|
||||
if option.Key == key {
|
||||
return option.Value
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type Repository struct {
|
||||
ID string // max:64
|
||||
Nodes []Node // max:64
|
||||
|
||||
Reference in new issue
Block a user