Merge branch 'main' into v2

* main:
  feat(config): expose folder and device info as metrics (fixes #9519) (#10148)
  chore: add issue types to GitHub issue templates
  build: remove schedule from PR metadata job
  chore(protocol): only allow enc. password changes on cluster config (#10145)
  chore(protocol): don't start connection routines a second time (#10146)
This commit is contained in:
Jakob Borg
2025-05-31 17:10:00 +02:00
15 changed files with 132 additions and 111 deletions
+4 -4
View File
@@ -31,17 +31,17 @@ func TestIndexhandlerConcurrency(t *testing.T) {
ci := &protomock.ConnectionInfo{}
m1 := &mocks.Model{}
c1 := protocol.NewConnection(protocol.EmptyDeviceID, ar, bw, testutil.NoopCloser{}, m1, ci, protocol.CompressionNever, nil, nil)
c1 := protocol.NewConnection(protocol.EmptyDeviceID, ar, bw, testutil.NoopCloser{}, m1, ci, protocol.CompressionNever, nil)
c1.Start()
defer c1.Close(io.EOF)
m2 := &mocks.Model{}
c2 := protocol.NewConnection(protocol.EmptyDeviceID, br, aw, testutil.NoopCloser{}, m2, ci, protocol.CompressionNever, nil, nil)
c2 := protocol.NewConnection(protocol.EmptyDeviceID, br, aw, testutil.NoopCloser{}, m2, ci, protocol.CompressionNever, nil)
c2.Start()
defer c2.Close(io.EOF)
c1.ClusterConfig(&protocol.ClusterConfig{})
c2.ClusterConfig(&protocol.ClusterConfig{})
c1.ClusterConfig(&protocol.ClusterConfig{}, nil)
c2.ClusterConfig(&protocol.ClusterConfig{}, nil)
c1.Index(ctx, &protocol.Index{Folder: "foo"})
c2.Index(ctx, &protocol.Index{Folder: "foo"})
+3 -6
View File
@@ -1641,8 +1641,7 @@ func (m *model) sendClusterConfig(ids []protocol.DeviceID) {
// Generating cluster-configs acquires the mutex.
for _, conn := range ccConns {
cm, passwords := m.generateClusterConfig(conn.DeviceID())
conn.SetFolderPasswords(passwords)
go conn.ClusterConfig(cm)
go conn.ClusterConfig(cm, passwords)
}
}
@@ -2379,10 +2378,9 @@ func (m *model) promoteConnections() {
l.Debugf("Promoting connection to %s at %s", deviceID.Short(), conn)
postLockActions = append(postLockActions, func() {
if conn.Statistics().StartedAt.IsZero() {
conn.SetFolderPasswords(passwords)
conn.Start()
}
conn.ClusterConfig(cm)
conn.ClusterConfig(cm, passwords)
})
m.promotedConnID[deviceID] = connIDs[0]
}
@@ -2393,9 +2391,8 @@ func (m *model) promoteConnections() {
conn := m.connections[connID]
if conn.Statistics().StartedAt.IsZero() {
postLockActions = append(postLockActions, func() {
conn.SetFolderPasswords(passwords)
conn.Start()
conn.ClusterConfig(&protocol.ClusterConfig{Secondary: true})
conn.ClusterConfig(&protocol.ClusterConfig{Secondary: true}, passwords)
})
}
}
+3 -3
View File
@@ -2968,7 +2968,7 @@ func TestConnCloseOnRestart(t *testing.T) {
nw := &testutil.NoopRW{}
ci := &protocolmocks.ConnectionInfo{}
ci.ConnectionIDReturns(srand.String(16))
m.AddConnection(protocol.NewConnection(device1, br, nw, testutil.NoopCloser{}, m, ci, protocol.CompressionNever, nil, m.keyGen), protocol.Hello{})
m.AddConnection(protocol.NewConnection(device1, br, nw, testutil.NoopCloser{}, m, ci, protocol.CompressionNever, m.keyGen), protocol.Hello{})
m.mut.RLock()
if len(m.closed) != 1 {
t.Fatalf("Expected just one conn (len(m.closed) == %v)", len(m.closed))
@@ -3535,11 +3535,11 @@ func testConfigChangeTriggersClusterConfigs(t *testing.T, expectFirst, expectSec
cc1 := make(chan struct{}, 1)
cc2 := make(chan struct{}, 1)
fc1 := newFakeConnection(device1, m)
fc1.ClusterConfigCalls(func(_ *protocol.ClusterConfig) {
fc1.ClusterConfigCalls(func(_ *protocol.ClusterConfig, _ map[string]string) {
cc1 <- struct{}{}
})
fc2 := newFakeConnection(device2, m)
fc2.ClusterConfigCalls(func(_ *protocol.ClusterConfig) {
fc2.ClusterConfigCalls(func(_ *protocol.ClusterConfig, _ map[string]string) {
cc2 <- struct{}{}
})
m.AddConnection(fc1, protocol.Hello{})
+1 -1
View File
@@ -1236,7 +1236,7 @@ func TestRequestIndexSenderClusterConfigBeforeStart(t *testing.T) {
}
return nil
})
fc.ClusterConfigCalls(func(cc *protocol.ClusterConfig) {
fc.ClusterConfigCalls(func(cc *protocol.ClusterConfig, _ map[string]string) {
select {
case ccChan <- cc:
case <-done: