Skip to content

Commit 1d6f2ee

Browse files
authored
Merge pull request #22 from dadav/fix_lock
Fix shared fs problem
2 parents bd2374d + c6e4c2d commit 1d6f2ee

File tree

6 files changed

+86
-16
lines changed

6 files changed

+86
-16
lines changed

go.mod

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@ go 1.22.0
44

55
require (
66
github.com/a-h/templ v0.2.747
7-
github.com/go-chi/chi/v5 v5.0.12
7+
github.com/alexflint/go-filemutex v1.3.0
8+
github.com/go-chi/chi/v5 v5.1.0
89
github.com/go-chi/cors v1.2.1
910
github.com/go-chi/jwtauth/v5 v5.3.1
1011
github.com/go-chi/stampede v0.6.0
1112
github.com/hashicorp/go-version v1.7.0
1213
github.com/mitchellh/go-homedir v1.1.0
13-
github.com/spf13/cobra v1.8.0
14+
github.com/spf13/cobra v1.8.1
1415
github.com/spf13/pflag v1.0.5
1516
github.com/spf13/viper v1.19.0
1617
go.uber.org/zap v1.27.0
17-
golang.org/x/sync v0.7.0
18+
golang.org/x/sync v0.8.0
1819
)
1920

2021
require (
21-
github.com/cespare/xxhash/v2 v2.2.0 // indirect
22+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2223
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
2324
github.com/fsnotify/fsnotify v1.7.0 // indirect
2425
github.com/goccy/go-json v0.10.3 // indirect
@@ -28,9 +29,9 @@ require (
2829
github.com/inconshreveable/mousetrap v1.1.0 // indirect
2930
github.com/lestrrat-go/blackmagic v1.0.2 // indirect
3031
github.com/lestrrat-go/httpcc v1.0.1 // indirect
31-
github.com/lestrrat-go/httprc v1.0.5 // indirect
32+
github.com/lestrrat-go/httprc v1.0.6 // indirect
3233
github.com/lestrrat-go/iter v1.0.2 // indirect
33-
github.com/lestrrat-go/jwx/v2 v2.0.21 // indirect
34+
github.com/lestrrat-go/jwx/v2 v2.1.1 // indirect
3435
github.com/lestrrat-go/option v1.0.1 // indirect
3536
github.com/magiconair/properties v1.8.7 // indirect
3637
github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -40,13 +41,13 @@ require (
4041
github.com/segmentio/asm v1.2.0 // indirect
4142
github.com/sourcegraph/conc v0.3.0 // indirect
4243
github.com/spf13/afero v1.11.0 // indirect
43-
github.com/spf13/cast v1.6.0 // indirect
44+
github.com/spf13/cast v1.7.0 // indirect
4445
github.com/subosito/gotenv v1.6.0 // indirect
4546
go.uber.org/multierr v1.11.0 // indirect
46-
golang.org/x/crypto v0.24.0 // indirect
47-
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
48-
golang.org/x/sys v0.21.0 // indirect
49-
golang.org/x/text v0.16.0 // indirect
47+
golang.org/x/crypto v0.26.0 // indirect
48+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect
49+
golang.org/x/sys v0.24.0 // indirect
50+
golang.org/x/text v0.17.0 // indirect
5051
gopkg.in/ini.v1 v1.67.0 // indirect
5152
gopkg.in/yaml.v3 v3.0.1 // indirect
5253
)

go.sum

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
github.com/a-h/templ v0.2.747 h1:D0dQ2lxC3W7Dxl6fxQ/1zZHBQslSkTSvl5FxP/CfdKg=
22
github.com/a-h/templ v0.2.747/go.mod h1:69ObQIbrcuwPCU32ohNaWce3Cb7qM5GMiqN1K+2yop4=
3+
github.com/alexflint/go-filemutex v1.3.0 h1:LgE+nTUWnQCyRKbpoceKZsPQbs84LivvgwUymZXdOcM=
4+
github.com/alexflint/go-filemutex v1.3.0/go.mod h1:U0+VA/i30mGBlLCrFPGtTe9y6wGQfNAWPBTekHQ+c8A=
35
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
46
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
7+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
8+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
59
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
10+
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
611
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
712
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
813
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -15,6 +20,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
1520
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
1621
github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
1722
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
23+
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
24+
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
1825
github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
1926
github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
2027
github.com/go-chi/jwtauth/v5 v5.3.1 h1:1ePWrjVctvp1tyBq5b/2ER8Th/+RbYc7x4qNsc5rh5A=
@@ -45,10 +52,14 @@ github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZ
4552
github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E=
4653
github.com/lestrrat-go/httprc v1.0.5 h1:bsTfiH8xaKOJPrg1R+E3iE/AWZr/x0Phj9PBTG/OLUk=
4754
github.com/lestrrat-go/httprc v1.0.5/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo=
55+
github.com/lestrrat-go/httprc v1.0.6 h1:qgmgIRhpvBqexMJjA/PmwSvhNk679oqD1RbovdCGW8k=
56+
github.com/lestrrat-go/httprc v1.0.6/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo=
4857
github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI=
4958
github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4=
5059
github.com/lestrrat-go/jwx/v2 v2.0.21 h1:jAPKupy4uHgrHFEdjVjNkUgoBKtVDgrQPB/h55FHrR0=
5160
github.com/lestrrat-go/jwx/v2 v2.0.21/go.mod h1:09mLW8zto6bWL9GbwnqAli+ArLf+5M33QLQPDggkUWM=
61+
github.com/lestrrat-go/jwx/v2 v2.1.1 h1:Y2ltVl8J6izLYFs54BVcpXLv5msSW4o8eXwnzZLI32E=
62+
github.com/lestrrat-go/jwx/v2 v2.1.1/go.mod h1:4LvZg7oxu6Q5VJwn7Mk/UwooNRnTHUpXBj2C4j3HNx0=
5263
github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU=
5364
github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
5465
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
@@ -77,8 +88,12 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
7788
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
7889
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
7990
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
91+
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
92+
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
8093
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
8194
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
95+
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
96+
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
8297
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
8398
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
8499
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
@@ -87,6 +102,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
87102
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
88103
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
89104
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
105+
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
90106
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
91107
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
92108
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
@@ -103,19 +119,31 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
103119
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
104120
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
105121
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
122+
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
123+
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
106124
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
107125
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
126+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI=
127+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
108128
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
109129
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
130+
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
131+
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
132+
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
110133
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
111134
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
135+
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
136+
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
112137
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
113138
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
139+
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
140+
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
114141
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
115142
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
116143
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
117144
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
118145
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
146+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
119147
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
120148
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
121149
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

helm/gorge/templates/deployment.yaml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@ spec:
2828
{{- toYaml .Values.securityContext | nindent 12 }}
2929
image: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
3030
imagePullPolicy: {{ .Values.image.pullPolicy }}
31-
env:
32-
- name: GORGE_MODULESDIR
33-
value: /modules
31+
args:
32+
- serve
33+
- --modulesdir=/modules
34+
- --bind=0.0.0.0
35+
- --port=8080
36+
- --fallback-proxy=https://forge.puppetlabs.com
37+
- --import-proxied-releases
38+
- --modules-scan-sec=2
3439
ports:
3540
- name: http
3641
containerPort: 8080

helm/gorge/templates/pvc.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ spec:
1212
- ReadWriteOnce
1313
resources:
1414
requests:
15-
storage: {{ .Values.persitence.size }}
15+
storage: {{ .Values.persistence.size }}
1616
{{- end }}

helm/gorge/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ resources:
123123
# - type: "null"
124124
# @schema
125125
# -- Maximum cpu
126-
cpu:
126+
cpu: 1
127127
# @schema
128128
# type: "string"
129129
# pattern: ^\d+[MTPG]i$

internal/v3/backend/filesystem.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"sync"
1717
"time"
1818

19+
"github.com/alexflint/go-filemutex"
1920
"github.com/dadav/gorge/internal/config"
2021
"github.com/dadav/gorge/internal/log"
2122
"github.com/dadav/gorge/internal/model"
@@ -212,6 +213,17 @@ func (s *FilesystemBackend) AddRelease(releaseData []byte) (*gen.Release, error)
212213
}
213214
}
214215

216+
m, err := filemutex.New(fmt.Sprintf("%s.lock", releaseFilePath))
217+
if err != nil {
218+
return nil, err
219+
}
220+
log.Log.Debugf("locking %s\n", fmt.Sprintf("%s.lock", releaseFilePath))
221+
err = m.Lock()
222+
if err != nil {
223+
return nil, err
224+
}
225+
defer m.Unlock()
226+
215227
err = os.WriteFile(releaseFilePath, releaseData, 0644)
216228
if err != nil {
217229
return nil, err
@@ -330,11 +342,25 @@ func (s *FilesystemBackend) LoadModules() error {
330342
return nil
331343
}
332344

345+
m, err := filemutex.New(fmt.Sprintf("%s.lock", path))
346+
if err != nil {
347+
return err
348+
}
349+
350+
log.Log.Debugf("locking %s\n", fmt.Sprintf("%s.lock", path))
351+
err = m.RLock()
352+
if err != nil {
353+
return err
354+
}
355+
333356
log.Log.Debugf("Reading %s\n", path)
334357
releaseBytes, err := os.ReadFile(path)
335358
if err != nil {
336359
return err
337360
}
361+
log.Log.Debugf("removing lock %s\n", fmt.Sprintf("%s.lock", path))
362+
m.RUnlock()
363+
338364
_, err = s.AddRelease(releaseBytes)
339365
return err
340366
})
@@ -349,6 +375,16 @@ func ReadReleaseMetadataFromFile(path string) (*model.ReleaseMetadata, string, e
349375
var releaseMetadata model.ReleaseMetadata
350376
readme := new(strings.Builder)
351377

378+
m, err := filemutex.New(fmt.Sprintf("%s.lock", path))
379+
if err != nil {
380+
return nil, "", err
381+
}
382+
err = m.RLock()
383+
if err != nil {
384+
return nil, "", err
385+
}
386+
defer m.RUnlock()
387+
352388
f, err := os.Open(path)
353389
if err != nil {
354390
return nil, readme.String(), err

0 commit comments

Comments
 (0)