diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d67c9d..07b7d66 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,15 +1,19 @@ -name: Go +name: Build on: push: - branches: [ "main" ] + branches-ignore: + - '**-wip' pull_request: - branches: [ "*" ] + branches: + - "*" jobs: - build: + make: runs-on: ubuntu-latest + # Pull requests from the same repository won't trigger this checks as they were already triggered by the push + if: (github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository) strategy: matrix: - go: [ '1.19', '1.20' ] + go: [ '1.20', '1.21' ] steps: - uses: actions/checkout@v3 - uses: actions/setup-go@v4 diff --git a/go.mod b/go.mod index ad4bb26..1b4c2fb 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module darvaza.org/cache go 1.19 require ( - darvaza.org/core v0.9.7 - darvaza.org/slog v0.5.3 - github.com/mgechev/revive v1.3.2 + darvaza.org/core v0.9.9 + darvaza.org/slog v0.5.4 + github.com/mgechev/revive v1.3.4 ) require ( github.com/BurntSushi/toml v1.3.2 // indirect - github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 // indirect + github.com/chavacava/garif v0.1.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/fatih/structtag v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -21,8 +21,8 @@ require ( github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect - golang.org/x/tools v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/tools v0.13.0 // indirect ) diff --git a/go.sum b/go.sum index 02711ad..e5ee51a 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ -darvaza.org/core v0.9.7 h1:06htj8yzZ5xIrcYpmjdPBmTg1+y1oHbpzCXDOd7j3jo= -darvaza.org/core v0.9.7/go.mod h1:4zYtG5ArBmdZ1n7Gw6e6ZwkEQiPFWIYjsQfSmTYCTMc= -darvaza.org/slog v0.5.3 h1:sQzmZXgqRh9oFMKBwEYrEpucLvKJVZxaxa2bHIA6GJ0= -darvaza.org/slog v0.5.3/go.mod h1:59d+yi+C7gn4pDDuwbbOKawERpdXthFFk1Yc+Sv6XB0= +darvaza.org/core v0.9.9 h1:nUNvkGJzWUEQcFSCMjZU8L+yQml8OPWGg7xh7MlSpM4= +darvaza.org/core v0.9.9/go.mod h1:5YJ2YovkxdjgXd7xMGbg4/cBf0i8Y2Qv80twxl1yf4s= +darvaza.org/slog v0.5.4 h1:xzlWVzYh4tuZLnj4A9tOHXfn/SAEIkApXPvK3YDiW9g= +darvaza.org/slog v0.5.4/go.mod h1:QFtY3QoQ7xxww85umlEKPcMCNzqNrHYqnj53KehsmBU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0= -github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo= +github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= +github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -23,8 +23,8 @@ github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZ github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.3.2 h1:Wb8NQKBaALBJ3xrrj4zpwJwqwNA6nDpyJSEQWcCka6U= -github.com/mgechev/revive v1.3.2/go.mod h1:UCLtc7o5vg5aXCwdUTU1kEBQ1v+YXPAkYDIDXbrs5I0= +github.com/mgechev/revive v1.3.4 h1:k/tO3XTaWY4DEHal9tWBkkUMJYO/dLDVyMmAQxmIMDc= +github.com/mgechev/revive v1.3.4/go.mod h1:W+pZCMu9qj8Uhfs1iJMQsEFLRozUfvwFwqVvRbSNLVw= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= @@ -41,20 +41,20 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= -golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/x/groupcache/go.mod b/x/groupcache/go.mod index 4ded6e4..3eef092 100644 --- a/x/groupcache/go.mod +++ b/x/groupcache/go.mod @@ -6,8 +6,8 @@ replace darvaza.org/cache => ../../ require ( darvaza.org/cache v0.2.2 - darvaza.org/core v0.9.7 - darvaza.org/slog v0.5.3 + darvaza.org/core v0.9.9 + darvaza.org/slog v0.5.4 github.com/mailgun/groupcache/v2 v2.5.0 ) @@ -16,8 +16,9 @@ require ( github.com/google/go-cmp v0.5.9 // indirect github.com/segmentio/fasthash v1.0.3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/x/groupcache/go.sum b/x/groupcache/go.sum index 5c2cd67..21405d3 100644 --- a/x/groupcache/go.sum +++ b/x/groupcache/go.sum @@ -1,7 +1,7 @@ -darvaza.org/core v0.9.7 h1:06htj8yzZ5xIrcYpmjdPBmTg1+y1oHbpzCXDOd7j3jo= -darvaza.org/core v0.9.7/go.mod h1:4zYtG5ArBmdZ1n7Gw6e6ZwkEQiPFWIYjsQfSmTYCTMc= -darvaza.org/slog v0.5.3 h1:sQzmZXgqRh9oFMKBwEYrEpucLvKJVZxaxa2bHIA6GJ0= -darvaza.org/slog v0.5.3/go.mod h1:59d+yi+C7gn4pDDuwbbOKawERpdXthFFk1Yc+Sv6XB0= +darvaza.org/core v0.9.9 h1:nUNvkGJzWUEQcFSCMjZU8L+yQml8OPWGg7xh7MlSpM4= +darvaza.org/core v0.9.9/go.mod h1:5YJ2YovkxdjgXd7xMGbg4/cBf0i8Y2Qv80twxl1yf4s= +darvaza.org/slog v0.5.4 h1:xzlWVzYh4tuZLnj4A9tOHXfn/SAEIkApXPvK3YDiW9g= +darvaza.org/slog v0.5.4/go.mod h1:QFtY3QoQ7xxww85umlEKPcMCNzqNrHYqnj53KehsmBU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -22,14 +22,15 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/x/memcache/go.mod b/x/memcache/go.mod index 3e5f383..4b1f63a 100644 --- a/x/memcache/go.mod +++ b/x/memcache/go.mod @@ -10,11 +10,11 @@ replace ( require ( darvaza.org/cache v0.2.2 darvaza.org/cache/x/simplelru v0.1.3 - darvaza.org/core v0.9.7 - darvaza.org/slog v0.5.3 + darvaza.org/core v0.9.9 + darvaza.org/slog v0.5.4 ) require ( - golang.org/x/net v0.14.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/text v0.13.0 // indirect ) diff --git a/x/memcache/go.sum b/x/memcache/go.sum index 109dc66..06bf5d9 100644 --- a/x/memcache/go.sum +++ b/x/memcache/go.sum @@ -1,9 +1,9 @@ -darvaza.org/core v0.9.7 h1:06htj8yzZ5xIrcYpmjdPBmTg1+y1oHbpzCXDOd7j3jo= -darvaza.org/core v0.9.7/go.mod h1:4zYtG5ArBmdZ1n7Gw6e6ZwkEQiPFWIYjsQfSmTYCTMc= -darvaza.org/slog v0.5.3 h1:sQzmZXgqRh9oFMKBwEYrEpucLvKJVZxaxa2bHIA6GJ0= -darvaza.org/slog v0.5.3/go.mod h1:59d+yi+C7gn4pDDuwbbOKawERpdXthFFk1Yc+Sv6XB0= -golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +darvaza.org/core v0.9.9 h1:nUNvkGJzWUEQcFSCMjZU8L+yQml8OPWGg7xh7MlSpM4= +darvaza.org/core v0.9.9/go.mod h1:5YJ2YovkxdjgXd7xMGbg4/cBf0i8Y2Qv80twxl1yf4s= +darvaza.org/slog v0.5.4 h1:xzlWVzYh4tuZLnj4A9tOHXfn/SAEIkApXPvK3YDiW9g= +darvaza.org/slog v0.5.4/go.mod h1:QFtY3QoQ7xxww85umlEKPcMCNzqNrHYqnj53KehsmBU= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= diff --git a/x/protosink/go.mod b/x/protosink/go.mod index 68012d6..fd8af34 100644 --- a/x/protosink/go.mod +++ b/x/protosink/go.mod @@ -10,9 +10,9 @@ require ( ) require ( - darvaza.org/core v0.9.7 // indirect - darvaza.org/slog v0.5.3 // indirect + darvaza.org/core v0.9.9 // indirect + darvaza.org/slog v0.5.4 // indirect github.com/google/go-cmp v0.5.9 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/text v0.13.0 // indirect ) diff --git a/x/protosink/go.sum b/x/protosink/go.sum index 55b984f..13e03f8 100644 --- a/x/protosink/go.sum +++ b/x/protosink/go.sum @@ -1,16 +1,16 @@ -darvaza.org/core v0.9.7 h1:06htj8yzZ5xIrcYpmjdPBmTg1+y1oHbpzCXDOd7j3jo= -darvaza.org/core v0.9.7/go.mod h1:4zYtG5ArBmdZ1n7Gw6e6ZwkEQiPFWIYjsQfSmTYCTMc= -darvaza.org/slog v0.5.3 h1:sQzmZXgqRh9oFMKBwEYrEpucLvKJVZxaxa2bHIA6GJ0= -darvaza.org/slog v0.5.3/go.mod h1:59d+yi+C7gn4pDDuwbbOKawERpdXthFFk1Yc+Sv6XB0= +darvaza.org/core v0.9.9 h1:nUNvkGJzWUEQcFSCMjZU8L+yQml8OPWGg7xh7MlSpM4= +darvaza.org/core v0.9.9/go.mod h1:5YJ2YovkxdjgXd7xMGbg4/cBf0i8Y2Qv80twxl1yf4s= +darvaza.org/slog v0.5.4 h1:xzlWVzYh4tuZLnj4A9tOHXfn/SAEIkApXPvK3YDiW9g= +darvaza.org/slog v0.5.4/go.mod h1:QFtY3QoQ7xxww85umlEKPcMCNzqNrHYqnj53KehsmBU= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= diff --git a/x/simplelru/go.mod b/x/simplelru/go.mod index e23f506..00eac50 100644 --- a/x/simplelru/go.mod +++ b/x/simplelru/go.mod @@ -2,9 +2,9 @@ module darvaza.org/cache/x/simplelru go 1.19 -require darvaza.org/core v0.9.7 +require darvaza.org/core v0.9.9 require ( - golang.org/x/net v0.14.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/text v0.13.0 // indirect ) diff --git a/x/simplelru/go.sum b/x/simplelru/go.sum index c708489..f511c12 100644 --- a/x/simplelru/go.sum +++ b/x/simplelru/go.sum @@ -1,7 +1,7 @@ -darvaza.org/core v0.9.7 h1:06htj8yzZ5xIrcYpmjdPBmTg1+y1oHbpzCXDOd7j3jo= -darvaza.org/core v0.9.7/go.mod h1:4zYtG5ArBmdZ1n7Gw6e6ZwkEQiPFWIYjsQfSmTYCTMc= -golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +darvaza.org/core v0.9.9 h1:nUNvkGJzWUEQcFSCMjZU8L+yQml8OPWGg7xh7MlSpM4= +darvaza.org/core v0.9.9/go.mod h1:5YJ2YovkxdjgXd7xMGbg4/cBf0i8Y2Qv80twxl1yf4s= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= diff --git a/x/simplelru/lru.go b/x/simplelru/lru.go index 8400cd9..e569f50 100644 --- a/x/simplelru/lru.go +++ b/x/simplelru/lru.go @@ -55,6 +55,27 @@ func (m *LRU[K, T]) needsPruning() bool { return m.size > m.maxSize } +func (m *LRU[K, T]) getEntry(key K) (*list.Element, *entry[K, T], bool) { + le, ok := m.items[key] + if !ok { + return nil, nil, false + } + + p, ok := m.getListEntry(le) + if !ok { + // not possible + delete(m.items, key) + return nil, nil, false + } + + return le, p, true +} + +func (*LRU[K, T]) getListEntry(le *list.Element) (*entry[K, T], bool) { + p, ok := le.Value.(*entry[K, T]) + return p, ok +} + // Add adds an entry of a given size and optional expiration date, and // returns true if entries were removed func (m *LRU[K, T]) Add(key K, value T, size int, expire time.Time) bool { @@ -70,12 +91,11 @@ func (m *LRU[K, T]) Add(key K, value T, size int, expire time.Time) bool { expire: ex, } - if le, ok := m.items[key]; ok { + if le, p, ok := m.getEntry(key); ok { // update entry m.eviction.MoveToBack(le) // old - p := le.Value.(*entry[K, T]) m.size -= p.size // new *p = e @@ -110,8 +130,7 @@ func (m *LRU[K, T]) Evict(key K) { // and if it was found func (m *LRU[K, T]) Get(key K) (T, time.Time, bool) { var zero T - if le, ok := m.items[key]; ok { - p := le.Value.(*entry[K, T]) + if le, p, ok := m.getEntry(key); ok { if !p.Expired() { var e time.Time @@ -128,36 +147,60 @@ func (m *LRU[K, T]) Get(key K) (T, time.Time, bool) { } // prune removes entries if space is needed. It tries -// the oldests expired first, and then just the oldests. +// the oldest expired first, and then just the oldest. func (m *LRU[K, T]) prune() bool { - evicted := false + var evicted bool if m.needsPruning() { // evict expired first - core.ListForEachElement(m.eviction, - func(le *list.Element) bool { - p := le.Value.(*entry[K, T]) - if p.Expired() { - evicted = true - m.evictElement(le) - } - - return !m.needsPruning() - }) + if m.pruneLoop(true) { + evicted = true + } } if m.needsPruning() { // evict oldest - core.ListForEachElement(m.eviction, - func(le *list.Element) bool { + if m.pruneLoop(false) { + evicted = true + } + } + + return evicted +} + +// revive:disable:flag-parameter +func (m *LRU[K, T]) pruneLoop(onlyExpired bool) bool { + // revive:enable:flag-parameter + var evicted bool + + core.ListForEachElement(m.eviction, + func(le *list.Element) bool { + if m.pruneEvict(le, onlyExpired) { evicted = true - m.evictElement(le) + } + return !m.needsPruning() + }) + + return evicted +} - return !m.needsPruning() - }) +func (m *LRU[K, T]) pruneEvict(le *list.Element, onlyExpired bool) bool { + var evict bool + p, ok := m.getListEntry(le) + switch { + case !ok: + evict = true + case !onlyExpired: + evict = true + default: + evict = p.Expired() } - return evicted + if evict { + m.evictElement(le) + } + + return evict } // EvictExpired scans the whole cache and evicts all expired entries @@ -165,8 +208,8 @@ func (m *LRU[K, T]) EvictExpired() bool { var evicted bool core.ListForEachElement(m.eviction, func(le *list.Element) bool { - p := le.Value.(*entry[K, T]) - if p.Expired() { + p, ok := m.getListEntry(le) + if !ok || p.Expired() { evicted = true m.evictElement(le) } @@ -177,10 +220,15 @@ func (m *LRU[K, T]) EvictExpired() bool { } func (m *LRU[K, T]) evictElement(le *list.Element) { - p := le.Value.(*entry[K, T]) + p, ok := m.getListEntry(le) // remove from eviction list m.eviction.Remove(le) + + if !ok { + return + } + // remove from items delete(m.items, p.key) // remove from size @@ -208,8 +256,8 @@ func (m *LRU[K, T]) ForEach(fn func(K, T, int, time.Time) bool) { func (m *LRU[K, T]) forEachIter(le *list.Element, fn func(K, T, int, time.Time) bool) bool { var ex time.Time - p := le.Value.(*entry[K, T]) - if p.Expired() { + p, ok := m.getListEntry(le) + if !ok || p.Expired() { m.evictElement(le) return false }