Skip to content
Merged
Show file tree
Hide file tree
Changes from 170 commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
172f993
feat(go): add user schema;
VishalDalwadi Jan 5, 2026
1b725e4
feat(go): migrate to user schema;
VishalDalwadi Jan 5, 2026
efc75b6
feat(go): add audit fields;
VishalDalwadi Jan 7, 2026
7abc3ec
feat(go): remove unused fields from the network model;
VishalDalwadi Jan 7, 2026
7009a71
feat(go): add network schema;
VishalDalwadi Jan 7, 2026
6a9a2cf
feat(go): migrate to network schema;
VishalDalwadi Jan 7, 2026
e82edb0
refactor(go): add comment to clarify migration logic;
VishalDalwadi Jan 7, 2026
2c510f1
Merge branch 'master' into NM-163
VishalDalwadi Jan 7, 2026
aa527fb
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Jan 7, 2026
0b50ebb
fix(go): test failures;
VishalDalwadi Jan 7, 2026
1b96b04
fix(go): test failures;
VishalDalwadi Jan 7, 2026
7bbd58d
feat(go): change membership table to store memberships at all scopes;
VishalDalwadi Jan 14, 2026
4a15156
feat(go): add schema for access grants;
VishalDalwadi Jan 19, 2026
de4fbfa
feat(go): remove nameservers from new networks table; ensure db passe…
VishalDalwadi Jan 19, 2026
1a27338
feat(go): set max conns for sqlite to 1;
VishalDalwadi Jan 21, 2026
405aff0
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Jan 21, 2026
33c234c
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Feb 2, 2026
aeced0a
Merge branch 'develop' into NM-163
VishalDalwadi Feb 3, 2026
e6a723c
fix(go): issues updating user account status;
VishalDalwadi Feb 3, 2026
84ca8d4
NM-236: streamline operations in HA mode
abhishek9686 Feb 5, 2026
70a27c5
NM-236: only master pod should subscribe to updates from clients
abhishek9686 Feb 6, 2026
3d1886e
Merge branch 'develop' into NM-236
abhishek9686 Feb 17, 2026
3f87f1b
refactor(go): remove converters and access grants;
VishalDalwadi Feb 19, 2026
ce6d3fb
refactor(go): add json tags in schema models;
VishalDalwadi Feb 19, 2026
aacd3c7
refactor(go): rename file to migrate_v1_6_0.go;
VishalDalwadi Feb 19, 2026
a00c1e9
refactor(go): add user groups and user roles tables; use schema tables;
VishalDalwadi Feb 22, 2026
2d1682b
refactor(go): inline get and list from schema package;
VishalDalwadi Feb 23, 2026
ad749fe
refactor(go): inline get network and list users from schema package;
VishalDalwadi Feb 23, 2026
43736a5
fix(go): staticcheck issues;
VishalDalwadi Feb 23, 2026
425b0b8
fix(go): remove test not in use; fix test case;
VishalDalwadi Feb 23, 2026
0645640
fix(go): validate network;
VishalDalwadi Feb 23, 2026
9f0a5e3
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Feb 23, 2026
95b4dbd
fix(go): resolve static checks;
VishalDalwadi Feb 23, 2026
9ff1507
fix(go): new models errors;
VishalDalwadi Feb 24, 2026
fdd1f51
fix(go): test errors;
VishalDalwadi Feb 24, 2026
6af89f6
fix(go): handle no records;
VishalDalwadi Feb 24, 2026
ea2cf99
fix(go): add validations for user object;
VishalDalwadi Feb 26, 2026
8a4a5de
fix(go): set correct extclient status;
VishalDalwadi Feb 26, 2026
593481c
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Feb 26, 2026
6ecbb7f
fix(go): test error;
VishalDalwadi Feb 26, 2026
c25d66c
feat(go): make schema the base package;
VishalDalwadi Feb 27, 2026
aefff74
feat(go): add host schema;
VishalDalwadi Feb 27, 2026
047a903
feat(go): use schema host everywhere;
VishalDalwadi Feb 27, 2026
e7ca41c
feat(go): inline get host, list hosts and delete host;
VishalDalwadi Feb 27, 2026
6ef1a0e
Merge branch 'develop' into NM-236
abhishek9686 Feb 28, 2026
06fad84
feat(go): use non-ptr value;
VishalDalwadi Mar 2, 2026
9534baf
feat(go): use save to upsert all fields;
VishalDalwadi Mar 2, 2026
41f4921
feat(go): use save to upsert all fields;
VishalDalwadi Mar 2, 2026
02f9be3
feat(go): save turn endpoint as string;
VishalDalwadi Mar 2, 2026
2c32294
feat(go): check for gorm error record not found;
VishalDalwadi Mar 2, 2026
3db1315
fix(go): test failures;
VishalDalwadi Mar 2, 2026
669d8b5
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Mar 2, 2026
e0a2685
fix(go): update all network fields;
VishalDalwadi Mar 3, 2026
c84bd6e
fix(go): update all network fields;
VishalDalwadi Mar 3, 2026
f3c4b9f
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Mar 4, 2026
0a36ed5
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Mar 4, 2026
38f7481
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-252
VishalDalwadi Mar 4, 2026
92ba570
feat(go): add paginated list networks api;
VishalDalwadi Mar 4, 2026
30bf563
Merge branch 'develop' into NM-236
abhishek9686 Mar 4, 2026
07e68b8
feat(go): add paginated list users api;
VishalDalwadi Mar 4, 2026
6a8519e
feat(go): add paginated list hosts api;
VishalDalwadi Mar 4, 2026
12a9e97
feat(go): add pagination to list groups api;
VishalDalwadi Mar 4, 2026
939b6db
fix(go): comment;
VishalDalwadi Mar 4, 2026
2753855
fix(go): implement marshal and unmarshal text for custom types;
VishalDalwadi Mar 5, 2026
15b81e8
Merge branch 'NM-252' of https://github.com/gravitl/netmaker into NM-253
VishalDalwadi Mar 5, 2026
4746988
fix(go): implement marshal and unmarshal json for custom types;
VishalDalwadi Mar 5, 2026
6f7e86f
fix(go): just use the old model for unmarshalling;
VishalDalwadi Mar 5, 2026
8ab5b08
Merge branch 'NM-252' of https://github.com/gravitl/netmaker into NM-253
VishalDalwadi Mar 5, 2026
a6de7c4
fix(go): implement marshal and unmarshal json for custom types;
VishalDalwadi Mar 5, 2026
a89c88b
Merge branch 'NM-252' of https://github.com/gravitl/netmaker into NM-253
VishalDalwadi Mar 5, 2026
e0180e1
NM-271:Import swap: compress/gzip replaced with github.com/klauspost/…
abhishek9686 Mar 5, 2026
db9be96
feat(go): remove paginated list networks api;
VishalDalwadi Mar 6, 2026
38e3f89
feat(go): use custom paginated response object;
VishalDalwadi Mar 6, 2026
b0379a2
NM-271: Improve server scalability under high host count
abhishek9686 Mar 6, 2026
4159329
NM-271: Reduce server CPU contention under high concurrent load
abhishek9686 Mar 8, 2026
d3a48df
fix(go): ensure default values for page and per_page are used when no…
VishalDalwadi Mar 9, 2026
4a63938
fix(go): rename v1.6.0 to v1.5.1;
VishalDalwadi Mar 9, 2026
3a55107
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-252
VishalDalwadi Mar 9, 2026
b34460c
Merge branch 'NM-252' of https://github.com/gravitl/netmaker into NM-253
VishalDalwadi Mar 9, 2026
7bbd660
Merge pull request #3886 from gravitl/NM-252
VishalDalwadi Mar 9, 2026
3a44197
fix(go): check for gorm.ErrRecordNotFound instead of database.IsEmpty…
VishalDalwadi Mar 9, 2026
e3a08f5
fix(go): use host id, not pending host id;
VishalDalwadi Mar 9, 2026
6e06b16
NM-271: Revert pure-Go SQLite and FIPS disable to verify impact
abhishek9686 Mar 9, 2026
5b4bf47
feat(go): add filters to paginated apis;
VishalDalwadi Mar 9, 2026
d644375
feat(go): add filters to paginated apis;
VishalDalwadi Mar 9, 2026
8a1acb1
feat(go): remove check for max username length;
VishalDalwadi Mar 10, 2026
275f55d
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-253
VishalDalwadi Mar 10, 2026
28a6ba5
Merge pull request #3894 from gravitl/NM-253
VishalDalwadi Mar 10, 2026
e640db6
feat(go): add filters to count as well;
VishalDalwadi Mar 10, 2026
ca70e41
feat(go): use library to check email address validity;
VishalDalwadi Mar 10, 2026
600208c
feat(go): ignore pagination if params not passed;
VishalDalwadi Mar 10, 2026
075a239
fix(go): pagination issues;
VishalDalwadi Mar 10, 2026
eabeff5
fix(go): check exists before using;
VishalDalwadi Mar 10, 2026
c8529eb
fix(go): remove debug log;
VishalDalwadi Mar 10, 2026
c70cc02
NM-271: rm debug logs
abhishek9686 Mar 11, 2026
2f3a214
NM-271: check if caching is enabled
abhishek9686 Mar 11, 2026
bbeb871
NM-271: add server sync mq topic for HA mode
abhishek9686 Mar 11, 2026
b0a51fd
Merge branch 'NM-236' of https://github.com/gravitl/netmaker into NM-…
abhishek9686 Mar 11, 2026
6790e3f
NM-271: fix build
abhishek9686 Mar 11, 2026
3f029b0
NM-271: push metrics in batch to exproter over api
abhishek9686 Mar 11, 2026
a13a293
NM-271: use basic auth for exporter metrics api
abhishek9686 Mar 11, 2026
edd7db9
fix(go): use gorm err record not found;
VishalDalwadi Mar 11, 2026
b36814e
NM-271: Add monitoring stack on demand
abhishek9686 Mar 11, 2026
c75cb90
Merge pull request #3908 from gravitl/NM-271-HA
abhishek9686 Mar 11, 2026
bd7a296
NM-271: -m arg for install script should only add monitoring stack
abhishek9686 Mar 12, 2026
f4d69ce
fix(go): use gorm err record not found;
VishalDalwadi Mar 12, 2026
49c1447
NM-271: update docker compose file for prometheus
abhishek9686 Mar 12, 2026
10faf13
NM-271: update docker compose file for prometheus
abhishek9686 Mar 12, 2026
9712954
fix(go): use user principal name when creating pending user;
VishalDalwadi Mar 12, 2026
3217073
Merge branch 'develop' into NM-163
abhishek9686 Mar 13, 2026
a2f892e
Merge branch 'develop' into NM-163
VishalDalwadi Mar 13, 2026
804588b
Merge branch 'develop' into NM-236
abhishek9686 Mar 13, 2026
9f71baf
fix(go): use schema package for consts;
VishalDalwadi Mar 13, 2026
9d43440
NM-236: rm duplicate network hook
abhishek9686 Mar 13, 2026
af46eb1
Merge branch 'NM-236' of https://github.com/gravitl/netmaker into NM-271
abhishek9686 Mar 13, 2026
2300429
Merge pull request #3852 from gravitl/NM-236
abhishek9686 Mar 13, 2026
ca76050
Merge branch 'NM-271' of https://github.com/gravitl/netmaker into NM-271
abhishek9686 Mar 13, 2026
a59c28b
NM-271: add server topic to reset idp hooks on master node
abhishek9686 Mar 13, 2026
0a882ed
Merge branch 'develop' into NM-271
abhishek9686 Mar 13, 2026
f613dee
fix(go): prevent disabling superadmin user;
VishalDalwadi Mar 13, 2026
d5e3229
fix(go): swap is admin and is superadmin;
VishalDalwadi Mar 13, 2026
525d3fb
fix(go): remove dead code block;
VishalDalwadi Mar 13, 2026
ae5daf7
fix(go): incorrect message when trying to disable self;
VishalDalwadi Mar 13, 2026
062f588
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Mar 13, 2026
4de11a1
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Mar 13, 2026
27a0595
NM-271: fix stale peers on reset_failovered pull and add HTTP timeout…
abhishek9686 Mar 13, 2026
7147aa3
Merge branch 'NM-271' of https://github.com/gravitl/netmaker into NM-271
abhishek9686 Mar 13, 2026
4a25df4
NM-271: fix gzip pool corruption, MQTT topic mismatch, stale settings…
abhishek9686 Mar 13, 2026
6af1435
NM-271: fix gzip writer pool leak, log checkin flush errors, and fix …
abhishek9686 Mar 13, 2026
f9d96c7
NM-271: simplify masterpod logic
abhishek9686 Mar 13, 2026
5703cc3
fix(go): use correct header;
VishalDalwadi Mar 13, 2026
fcfb887
fix(go): return after error response;
VishalDalwadi Mar 13, 2026
09567f6
fix(go): use correct order of params;
VishalDalwadi Mar 13, 2026
c9cd8f7
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Mar 13, 2026
e764d6d
fix(go): set default values for page and page size; use v2 instead of…
VishalDalwadi Mar 13, 2026
45c0889
NM-271: use host name
abhishek9686 Mar 13, 2026
cab7f85
Update mq/serversync.go
abhishek9686 Mar 13, 2026
bb48ddb
NM-271: fix duplicate serversynce case
abhishek9686 Mar 13, 2026
ff2b24a
NM-271: streamline gw updates
abhishek9686 Mar 16, 2026
399d2f8
Merge branch 'develop' of https://github.com/gravitl/netmaker into NM…
VishalDalwadi Mar 16, 2026
daf3425
Update logic/auth.go
VishalDalwadi Mar 16, 2026
08c9ae5
Update schema/user_roles.go
VishalDalwadi Mar 16, 2026
bba15a2
Merge branch 'develop' into NM-163
VishalDalwadi Mar 16, 2026
8f9d789
fix(go): syntax error;
VishalDalwadi Mar 16, 2026
9cbc387
fix(go): set default values when page and per_page are not passed or 0;
VishalDalwadi Mar 16, 2026
eea016d
fix(go): use uuid.parse instead of uuid.must parse;
VishalDalwadi Mar 16, 2026
7a78535
fix(go): review errors;
VishalDalwadi Mar 16, 2026
01b3941
fix(go): review errors;
VishalDalwadi Mar 16, 2026
ec9ff3e
Update controllers/user.go
abhishek9686 Mar 16, 2026
ad96680
Update controllers/user.go
abhishek9686 Mar 16, 2026
67febfa
NM-163: fix errors:
abhishek9686 Mar 16, 2026
a0c8bf5
Update db/types/options.go
abhishek9686 Mar 16, 2026
46b272e
fix(go): persist return user in event;
VishalDalwadi Mar 16, 2026
9de4b97
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Mar 16, 2026
c6cdb58
Update db/types/options.go
abhishek9686 Mar 17, 2026
c595f4f
NM-271: signal pull on ip changes
abhishek9686 Mar 17, 2026
b159b61
NM-163: duplicate lines of code
abhishek9686 Mar 17, 2026
f77c28e
NM-163: fix(go): fix missing return and filter parsing in user contro…
abhishek9686 Mar 17, 2026
d38a84d
NM-271: signal pull req on node ip change
abhishek9686 Mar 17, 2026
6a9e3bf
fix(go): check for both min and max page size;
VishalDalwadi Mar 17, 2026
7ab813c
Merge branch 'NM-163' of https://github.com/gravitl/netmaker into NM-163
VishalDalwadi Mar 17, 2026
a92faa6
NM-271: refresh node object before update
abhishek9686 Mar 17, 2026
dddbdd6
fix(go): enclose transfer superadmin in transaction;
VishalDalwadi Mar 17, 2026
9afba4e
fix(go): review errors;
VishalDalwadi Mar 17, 2026
baf13c5
fix(go): remove free tier checks;
VishalDalwadi Mar 17, 2026
394e5a4
fix(go): review fixes;
VishalDalwadi Mar 17, 2026
ca33faa
NM-271: streamline ip pool ops
abhishek9686 Mar 17, 2026
80763a0
NM-271: resolve merge conflicts
abhishek9686 Mar 17, 2026
f1d9f95
NM-271: resolve merge conflicts
abhishek9686 Mar 17, 2026
09d290e
NM-271: fix tests, set max idle conns
abhishek9686 Mar 17, 2026
4173239
NM-271: fix(go): fix data races in settings cache and peer update worker
abhishek9686 Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ RUN mkdir -p /etc/netclient/config
COPY --from=builder /app/netmaker .
COPY --from=builder /app/config config
EXPOSE 8081
EXPOSE 6060
ENTRYPOINT ["./netmaker"]
12 changes: 7 additions & 5 deletions compose/docker-compose.pro.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ services:
container_name: prometheus
image: prom/prometheus:latest
environment:
- METRICS_USERNAME=${METRICS_USERNAME:-netmaker}
- METRICS_SECRET=${METRICS_SECRET}
- NETMAKER_METRICS_TARGET=${NETMAKER_METRICS_TARGET:-http://netmaker-exporter:8085}
- PROMETHEUS_RETENTION_TIME=${PROMETHEUS_RETENTION_TIME:-15d}
Expand All @@ -15,18 +16,19 @@ services:
command:
- -c
- |
cp /etc/prometheus/prometheus.yml.tmpl /tmp/prometheus.yml
cp /etc/prometheus/prometheus.yml.tmpl /etc/prometheus/prometheus.rendered.yml
url="$${NETMAKER_METRICS_TARGET}"
if echo "$${url}" | grep -q '://'; then
scheme="$${url%%://*}"; target="$${url#*://}"
else
scheme="https"; target="$${url}"
fi
sed -i "s~NETMAKER_METRICS_TARGET~$${target}~g" /tmp/prometheus.yml
sed -i "s~__SCHEME__~$${scheme}~g" /tmp/prometheus.yml
sed -i "s~METRICS_SECRET~$${METRICS_SECRET}~g" /tmp/prometheus.yml
sed -i "s~NETMAKER_METRICS_TARGET~$${target}~g" /etc/prometheus/prometheus.rendered.yml
sed -i "s~__SCHEME__~$${scheme}~g" /etc/prometheus/prometheus.rendered.yml
sed -i "s~METRICS_USERNAME~$${METRICS_USERNAME}~g" /etc/prometheus/prometheus.rendered.yml
sed -i "s~METRICS_SECRET~$${METRICS_SECRET}~g" /etc/prometheus/prometheus.rendered.yml
exec /bin/prometheus \
--config.file=/tmp/prometheus.yml \
--config.file=/etc/prometheus/prometheus.rendered.yml \
--storage.tsdb.path=/prometheus \
--storage.tsdb.retention.time=$${PROMETHEUS_RETENTION_TIME:-15d} \
--storage.tsdb.retention.size=$${PROMETHEUS_RETENTION_SIZE:-0}
Expand Down
2 changes: 1 addition & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ type ServerConfig struct {
MasterKey string `yaml:"masterkey"`
DNSKey string `yaml:"dnskey"`
AllowedOrigin string `yaml:"allowedorigin"`
NodeID string `yaml:"nodeid"`
HostName string `yaml:"host_name"`
RestBackend string `yaml:"restbackend"`
MessageQueueBackend string `yaml:"messagequeuebackend"`
DNSMode string `yaml:"dnsmode"`
Expand Down
70 changes: 31 additions & 39 deletions controllers/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,40 +104,14 @@ func createGateway(w http.ResponseWriter, r *http.Request) {
logic.UpsertHost(host)
}
}
for _, relayedNodeID := range relayNode.RelayedNodes {
relayedNode, err := logic.GetNodeByID(relayedNodeID)
if err == nil {
if relayedNode.FailedOverBy != uuid.Nil {
go logic.ResetFailedOverPeer(&relayedNode)
}
if len(relayedNode.AutoRelayedPeers) > 0 {
go logic.ResetAutoRelayedPeer(&relayedNode)
}

}
}
if len(req.InetNodeClientIDs) > 0 {
logic.SetInternetGw(&node, req.InetNodeReq)
if servercfg.IsPro {
if _, exists := logic.FailOverExists(node.Network); exists {
go func() {
logic.ResetFailedOverPeer(&node)
mq.PublishPeerUpdate(false)
}()
}

go func() {
logic.ResetAutoRelayedPeer(&node)
mq.PublishPeerUpdate(false)
}()

}
if node.IsGw && node.IngressDNS == "" {
node.IngressDNS = "1.1.1.1"
}
logic.UpsertNode(&node)
}

logger.Log(
1,
r.Header.Get("user"),
Expand Down Expand Up @@ -168,6 +142,18 @@ func createGateway(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
go func() {
for _, relayedNodeID := range relayNode.RelayedNodes {
relayedNode, err := logic.GetNodeByID(relayedNodeID)
if err == nil {
if relayedNode.FailedOverBy != uuid.Nil {
logic.ResetFailedOverPeer(&relayedNode)
}
if len(relayedNode.AutoRelayedPeers) > 0 {
logic.ResetAutoRelayedPeer(&relayedNode)
}
}
}
logic.ResetAutoRelayedPeer(&node)
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
Expand Down Expand Up @@ -352,12 +338,7 @@ func assignGw(w http.ResponseWriter, r *http.Request) {
autoAssignGw = false
}
if autoAssignGw {
if node.FailedOverBy != uuid.Nil {
go logic.ResetFailedOverPeer(&node)
}
if len(node.AutoRelayedPeers) > 0 {
go logic.ResetAutoRelayedPeer(&node)
}

if node.RelayedBy != "" {
gatewayNode, err := logic.GetNodeByID(node.RelayedBy)
if err == nil {
Expand All @@ -384,6 +365,12 @@ func assignGw(w http.ResponseWriter, r *http.Request) {
logic.UpsertNode(&node)
logic.GetNodeStatus(&node, false)
go func() {
if node.FailedOverBy != uuid.Nil {
logic.ResetFailedOverPeer(&node)
}
if len(node.AutoRelayedPeers) > 0 {
logic.ResetAutoRelayedPeer(&node)
}
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
Expand All @@ -408,18 +395,16 @@ func assignGw(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("node %s is not a gateway", nodeid), "badrequest"))
return
}

if node.FailedOverBy != uuid.Nil {
go logic.ResetFailedOverPeer(&node)
}
if len(node.AutoRelayedPeers) > 0 {
go logic.ResetAutoRelayedPeer(&node)
}
newNodes := []string{node.ID.String()}
newNodes = append(newNodes, gatewayNode.RelayedNodes...)
newNodes = logic.UniqueStrings(newNodes)
logic.UpdateRelayNodes(gatewayNode.ID.String(), gatewayNode.RelayedNodes, newNodes)

node, err = logic.GetNodeByID(node.ID.String())
if err != nil {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
host := &schema.Host{
ID: node.HostID,
}
Expand Down Expand Up @@ -453,6 +438,13 @@ func assignGw(w http.ResponseWriter, r *http.Request) {
apiNode := node.ConvertToAPINode()

go func() {

if node.FailedOverBy != uuid.Nil {
logic.ResetFailedOverPeer(&node)
}
if len(node.AutoRelayedPeers) > 0 {
logic.ResetAutoRelayedPeer(&node)
}
if err := mq.NodeUpdate(&node); err != nil {
slog.Error("error publishing node update to node", "node", node.ID, "error", err)
}
Expand Down
57 changes: 22 additions & 35 deletions controllers/hosts.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,43 +301,34 @@ func pull(w http.ResponseWriter, r *http.Request) {
return
}

sendPeerUpdate := false
for _, nodeID := range host.Nodes {
node, err := logic.GetNodeByID(nodeID)
if err != nil {
//slog.Error("failed to get node:", "id", node.ID, "error", err)
continue
}
if r.URL.Query().Get("reset_failovered") == "true" {
resetFailovered := r.URL.Query().Get("reset_failovered") == "true"
if resetFailovered {
for _, nodeID := range host.Nodes {
node, err := logic.GetNodeByID(nodeID)
if err != nil {
continue
}
logic.ResetFailedOverPeer(&node)
logic.ResetAutoRelayedPeer(&node)
sendPeerUpdate = true
}
}
if sendPeerUpdate {
if err := mq.PublishPeerUpdate(false); err != nil {
logger.Log(0, "fail to publish peer update: ", err.Error())
}
}
allNodes, err := logic.GetAllNodes()
if err != nil {
logger.Log(0, "failed to get nodes: ", hostIDStr)
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
hPU, err := logic.GetPeerUpdateForHost("", host, allNodes, nil, nil)
if err != nil {
logger.Log(0, "could not pull peers for host", hostIDStr, err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
go mq.PublishPeerUpdate(false)
}

portChanged := logic.CheckHostPorts(host)
if portChanged {
// Save the port change to database immediately to prevent conflicts
if err := logic.UpsertHost(host); err != nil {
slog.Error("failed to save host port change", "host", host.Name, "error", err)
hPU, ok := logic.GetCachedHostPeerUpdate(hostID.String())
if !ok || resetFailovered {
allNodes, err := logic.GetAllNodes()
if err != nil {
logger.Log(0, "failed to get nodes: ", hostID.String())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
hPU, err = logic.GetPeerUpdateForHost("", host, allNodes, nil, nil)
if err != nil {
logger.Log(0, "could not pull peers for host", hostID.String(), err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
logic.StoreHostPeerUpdate(hostID.String(), hPU)
}

response := models.HostPull{
Expand Down Expand Up @@ -515,10 +506,6 @@ func hostUpdateFallback(w http.ResponseWriter, r *http.Request) {
switch hostUpdate.Action {
case models.CheckIn:
sendPeerUpdate = mq.HandleHostCheckin(&hostUpdate.Host, currentHost)
changed := logic.CheckHostPorts(currentHost)
if changed {
mq.HostUpdate(&models.HostUpdate{Action: models.UpdateHost, Host: *currentHost})
}
case models.UpdateHost:
if hostUpdate.Host.PublicKey != currentHost.PublicKey {
//remove old peer entry
Expand Down
10 changes: 7 additions & 3 deletions controllers/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -666,15 +666,19 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
},
Origin: schema.Dashboard,
})
ipChanged := currentNode.Address.String() != newNode.Address.String() ||
currentNode.Address6.String() != newNode.Address6.String()
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(apiNode)
go func(aclUpdate, relayupdate bool, newNode *models.Node) {
if err := mq.NodeUpdate(newNode); err != nil {
slog.Error("error publishing node update to node", "node", newNode.ID, "error", err)
}
// if !newNode.Connected {
// mq.HostUpdate(&models.HostUpdate{Host: *host, Action: models.SignalPull})
// }
if ipChanged {
if err := mq.HostUpdate(&models.HostUpdate{Action: models.RequestPull, Host: *host}); err != nil {
slog.Error("error sending sync pull to host on ip change", "host", host.ID, "error", err)
}
}
allNodes, err := logic.GetAllNodes()
if err == nil {
mq.PublishSingleHostPeerUpdate(host, allNodes, nil, nil, false, nil)
Expand Down
19 changes: 1 addition & 18 deletions database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package database

import (
"errors"
"sync"
"time"

"github.com/gravitl/netmaker/logger"
Expand Down Expand Up @@ -98,8 +97,6 @@ const (
isConnected = "isconnected"
)

var dbMutex sync.RWMutex

var Tables = []string{
NODES_TABLE_NAME,
CERTS_TABLE_NAME,
Expand Down Expand Up @@ -176,8 +173,6 @@ func CreateTable(tableName string) error {

// Insert - inserts object into db
func Insert(key string, value string, tableName string) error {
dbMutex.Lock()
defer dbMutex.Unlock()
if key != "" && value != "" {
return getCurrentDB()[INSERT].(func(string, string, string) error)(key, value, tableName)
} else {
Expand All @@ -187,37 +182,25 @@ func Insert(key string, value string, tableName string) error {

// DeleteRecord - deletes a record from db
func DeleteRecord(tableName string, key string) error {
dbMutex.Lock()
defer dbMutex.Unlock()
return getCurrentDB()[DELETE].(func(string, string) error)(tableName, key)
}

// DeleteAllRecords - removes a table and remakes
func DeleteAllRecords(tableName string) error {
dbMutex.Lock()
defer dbMutex.Unlock()
err := getCurrentDB()[DELETE_ALL].(func(string) error)(tableName)
if err != nil {
return err
}
err = CreateTable(tableName)
if err != nil {
return err
}
return nil
return CreateTable(tableName)
}

// FetchRecord - fetches a single record by key
func FetchRecord(tableName string, key string) (string, error) {
dbMutex.RLock()
defer dbMutex.RUnlock()
return getCurrentDB()[FETCH_ONE].(func(string, string) (string, error))(tableName, key)
}

// FetchRecords - fetches all records in given table
func FetchRecords(tableName string) (map[string]string, error) {
dbMutex.RLock()
defer dbMutex.RUnlock()
return getCurrentDB()[FETCH_ALL].(func(string) (map[string]string, error))(tableName)
}

Expand Down
4 changes: 3 additions & 1 deletion db/sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ func (s *sqliteConnector) connect() (*gorm.DB, error) {
}
}

db, err := gorm.Open(sqlite.Open(dbFilePath), &gorm.Config{
dsn := dbFilePath + "?_journal_mode=WAL&_busy_timeout=5000"
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
Expand All @@ -61,6 +62,7 @@ func (s *sqliteConnector) connect() (*gorm.DB, error) {
return nil, err
}

sqlDB.SetMaxOpenConns(1)
sqlDB.SetMaxIdleConns(1)

return db, nil
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ require (
github.com/google/go-cmp v0.7.0
github.com/goombaio/namegenerator v0.0.0-20181006234301-989e774b106e
github.com/guumaster/tablewriter v0.0.10
github.com/klauspost/compress v1.18.3
github.com/matryer/is v1.4.1
github.com/okta/okta-sdk-golang/v5 v5.0.6
github.com/pquerna/otp v1.5.0
Expand Down Expand Up @@ -91,7 +92,6 @@ require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/kelseyhightower/envconfig v1.4.0 // indirect
github.com/klauspost/compress v1.18.3 // indirect
github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect
github.com/lestrrat-go/blackmagic v1.0.2 // indirect
github.com/lestrrat-go/httpcc v1.0.1 // indirect
Expand Down
12 changes: 5 additions & 7 deletions logic/extpeers.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,13 +420,11 @@ func SaveExtClient(extclient *models.ExtClient) error {
}
if servercfg.CacheEnabled() {
storeExtClientInCache(key, *extclient)
if _, ok := allocatedIpMap[extclient.Network]; ok {
if extclient.Address != "" {
AddIpToAllocatedIpMap(extclient.Network, net.ParseIP(extclient.Address))
}
if extclient.Address6 != "" {
AddIpToAllocatedIpMap(extclient.Network, net.ParseIP(extclient.Address6))
}
if extclient.Address != "" {
AddIpToAllocatedIpMap(extclient.Network, net.ParseIP(extclient.Address))
}
if extclient.Address6 != "" {
AddIpToAllocatedIpMap(extclient.Network, net.ParseIP(extclient.Address6))
}
}

Expand Down
Loading