mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-21 22:12:36 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d7e06681d | ||
|
|
7fa0e78abd | ||
|
|
82888da4e9 | ||
|
|
1fea3f1072 | ||
|
|
94c3de8273 | ||
|
|
7392161894 | ||
|
|
c2b8942769 | ||
|
|
441614b386 | ||
|
|
903d288e08 | ||
|
|
485c881c10 | ||
|
|
9604db2c93 | ||
|
|
392656d59e | ||
|
|
de66c82252 | ||
|
|
239bef5677 | ||
|
|
de61e21654 | ||
|
|
3220c0de15 | ||
|
|
bad0c61154 | ||
|
|
b4fd5f71c0 | ||
|
|
e369fe5c72 | ||
|
|
9ca2b0b763 | ||
|
|
a7b964af96 | ||
|
|
e8d8bfcccc | ||
|
|
8eab76c5db | ||
|
|
9ebc132ffc | ||
|
|
29c2d9b965 | ||
|
|
a250699225 | ||
|
|
68f547bdf2 | ||
|
|
5e46960651 | ||
|
|
95d8f4415a | ||
|
|
7fd42f5d06 | ||
|
|
8f45e4589c | ||
|
|
c105f5a1b8 | ||
|
|
fc649018b0 | ||
|
|
bc5aadd8af | ||
|
|
568c0e4a6e | ||
|
|
5c3d7e6ae6 | ||
|
|
42efade0dc | ||
|
|
a75271dd43 | ||
|
|
fc4df944a0 | ||
|
|
331c1f0f3f | ||
|
|
551baa44b2 | ||
|
|
9f42ce3f01 | ||
|
|
250fbbb3db | ||
|
|
7913681297 | ||
|
|
33ba88df9c | ||
|
|
7c3a0ed874 | ||
|
|
be5f6b3565 | ||
|
|
50ae91a3cb | ||
|
|
5058879eff | ||
|
|
82f50d5033 | ||
|
|
793f527feb | ||
|
|
18a4ca0da2 | ||
|
|
a2330f624b | ||
|
|
be15fee8e7 | ||
|
|
95357df8dd | ||
|
|
4fe1248aa8 | ||
|
|
5452405a81 | ||
|
|
ca4dca14d8 | ||
|
|
cc05874d06 | ||
|
|
b2f56d9add | ||
|
|
b305b9fd11 | ||
|
|
8a78c4efa3 | ||
|
|
8a922eb518 | ||
|
|
56876ac654 | ||
|
|
f7950a9baa | ||
|
|
af1d7d0b38 | ||
|
|
f722910b78 | ||
|
|
b9e9f21132 | ||
|
|
2ecf915af2 | ||
|
|
c5f21b2b01 | ||
|
|
eab2e0e112 | ||
|
|
c7ae969c06 | ||
|
|
aa299462f2 | ||
|
|
2304d2b472 | ||
|
|
1609682ac2 | ||
|
|
12365ec6ae | ||
|
|
a0cf717432 | ||
|
|
caf5c05dc0 | ||
|
|
8e694c0512 | ||
|
|
e7f2936dcc | ||
|
|
da2a234b00 | ||
|
|
39c1dde9df | ||
|
|
d6459d74f4 | ||
|
|
630aa6fff6 | ||
|
|
568c5df50b | ||
|
|
b0977c11ec | ||
|
|
bc3640ee64 | ||
|
|
56123d1b03 | ||
|
|
3b1ac77e1f | ||
|
|
0e8e6122d5 | ||
|
|
bbf745d4e1 | ||
|
|
abc92e7338 | ||
|
|
276cc7802f | ||
|
|
824e183347 | ||
|
|
0594006c81 | ||
|
|
ab1984a852 | ||
|
|
e4d0dce904 | ||
|
|
9b9101b46b | ||
|
|
28a4f73033 | ||
|
|
87fdaa3451 | ||
|
|
b3ccc095ba | ||
|
|
20cbc9e4eb | ||
|
|
d7dfb11be9 | ||
|
|
de09a82a32 | ||
|
|
bfd59dd579 | ||
|
|
ec155022e7 | ||
|
|
a1a76ccb8c | ||
|
|
4d91ec359b | ||
|
|
ba0707af64 | ||
|
|
44c48c929a | ||
|
|
72af97162f | ||
|
|
9fbc4ea417 | ||
|
|
e77e50886e | ||
|
|
b2f26804a0 | ||
|
|
52cf759a96 | ||
|
|
93da4fe4d5 | ||
|
|
fa2d28c998 | ||
|
|
641fbc7a80 | ||
|
|
ab7b81bbad | ||
|
|
cbc3afe7d1 | ||
|
|
b4bcedf064 | ||
|
|
7a92b2cbb9 | ||
|
|
c531e2eb0e | ||
|
|
7eb8257126 | ||
|
|
9b48ce0613 | ||
|
|
926cfea3dc | ||
|
|
b81def5e5c | ||
|
|
d6f3e1970d | ||
|
|
0a4b1909a2 | ||
|
|
9987a65e8a | ||
|
|
b0210df081 | ||
|
|
23ffbb083c | ||
|
|
6320036c56 | ||
|
|
700b95304b | ||
|
|
c37281735e | ||
|
|
8c82c037b9 | ||
|
|
ff1392f7f4 | ||
|
|
4f6c989309 | ||
|
|
af4c51aee6 | ||
|
|
3cd2f06279 | ||
|
|
e438fdc16c | ||
|
|
3680bbac56 | ||
|
|
67461ccd27 | ||
|
|
522a25790a | ||
|
|
914ff0e718 | ||
|
|
f3dde99796 | ||
|
|
34cdbdd279 | ||
|
|
edef485333 | ||
|
|
351efa134d | ||
|
|
b65eb2ec45 | ||
|
|
b2ba7d7408 | ||
|
|
9a741a61b1 | ||
|
|
559a1fd0f4 | ||
|
|
88fa64a01a | ||
|
|
e2e97db917 | ||
|
|
fec88e64eb | ||
|
|
d43fa07f06 | ||
|
|
f965af51b7 | ||
|
|
11042ddb71 | ||
|
|
e4abb6cbea | ||
|
|
19d01c02c6 | ||
|
|
d54fbca481 | ||
|
|
29aaf3e68e | ||
|
|
8836fa19b6 | ||
|
|
167b50be88 | ||
|
|
fd6c787c02 | ||
|
|
ccf1795e6f | ||
|
|
04081128a9 | ||
|
|
54204bc89b | ||
|
|
ca499de1cb | ||
|
|
e56327e3b0 | ||
|
|
aebf3952b7 | ||
|
|
7fa4e5c2a1 | ||
|
|
a143c888e5 | ||
|
|
a49d9e020c | ||
|
|
75f5afa571 | ||
|
|
1c143cfcea | ||
|
|
c9f3448692 | ||
|
|
be09d08eb6 | ||
|
|
6b2612690b | ||
|
|
254ed8897e | ||
|
|
96f1a2e01a | ||
|
|
bb37886f6a | ||
|
|
e28f55eb08 | ||
|
|
98f03862aa | ||
|
|
07cf8cf22d | ||
|
|
0d5393641e | ||
|
|
2caa0e3741 | ||
|
|
bc7650bd61 | ||
|
|
f2db746690 | ||
|
|
7b3c0e937f | ||
|
|
180f267867 | ||
|
|
b21f599cde | ||
|
|
3fba0adc9d | ||
|
|
f8f162aa72 | ||
|
|
6d3e38f439 | ||
|
|
4a0dc883cf | ||
|
|
8ebbf37e8e | ||
|
|
008ac38ebc | ||
|
|
a5fe6e21bc | ||
|
|
3003c9e17e | ||
|
|
31d8907e77 | ||
|
|
7b0a37312d | ||
|
|
623fc3a4fc | ||
|
|
aa31c5422b | ||
|
|
6232041c64 | ||
|
|
72b14a451e | ||
|
|
3400962877 | ||
|
|
113c9ce6a8 | ||
|
|
88a1eee31c | ||
|
|
62c4980754 | ||
|
|
9a5d3e7b31 | ||
|
|
15fc58bfd9 | ||
|
|
706d1a8e22 | ||
|
|
90acfd9394 | ||
|
|
6161d0b05d | ||
|
|
98b519b113 | ||
|
|
efdebf712e | ||
|
|
dc784bf217 | ||
|
|
ffe908371d | ||
|
|
92366134e3 | ||
|
|
e2d30cc3bc | ||
|
|
d185e6beea | ||
|
|
f67b5b20ca | ||
|
|
a7973ed7d1 | ||
|
|
0f2c3648dc | ||
|
|
5bddf0c085 | ||
|
|
65fb8fad99 | ||
|
|
0060a2cf9c | ||
|
|
c29c912bdc | ||
|
|
ad6240f066 | ||
|
|
8802843511 | ||
|
|
3feb66d0a1 | ||
|
|
228946369c | ||
|
|
9873b033d1 | ||
|
|
f17048d32a | ||
|
|
cd789d869d | ||
|
|
1f9f6fae6b | ||
|
|
c74dca10cb | ||
|
|
0f55dd452d | ||
|
|
9105c6bdd1 | ||
|
|
ebbb35d533 | ||
|
|
089d4316ef | ||
|
|
6e388e29c9 | ||
|
|
8d6189bcc5 | ||
|
|
2f3d820f52 | ||
|
|
ae5bd0667a | ||
|
|
1c2b10303a | ||
|
|
a3b97bfe03 | ||
|
|
73921ce4f6 | ||
|
|
9369a88c5c | ||
|
|
970059d4ce | ||
|
|
d38456dc06 | ||
|
|
6c7824c813 | ||
|
|
0df4a4298b | ||
|
|
ad8e547690 | ||
|
|
eac37e41ef | ||
|
|
f57b108475 | ||
|
|
a8780b8831 | ||
|
|
c54cbc3787 | ||
|
|
d04859b01c | ||
|
|
54b91ba2b2 | ||
|
|
1e13b6879c | ||
|
|
f11567816e | ||
|
|
7bd638de47 | ||
|
|
5bd5a76d25 | ||
|
|
9dc47f6b97 | ||
|
|
e12b9ab746 | ||
|
|
cfbe45c765 | ||
|
|
a1f06c391c | ||
|
|
f56a96a009 | ||
|
|
758910e280 | ||
|
|
bbc23f04e0 | ||
|
|
c41de7f134 | ||
|
|
804e765397 | ||
|
|
c4525dc6e2 | ||
|
|
6845e25318 | ||
|
|
35fd1e1c9a | ||
|
|
b28b1a3402 | ||
|
|
07df5c53de | ||
|
|
1cf433abf2 | ||
|
|
4534976c31 | ||
|
|
460e637244 | ||
|
|
559cfc1fe0 | ||
|
|
13501cacd1 | ||
|
|
7a23784473 | ||
|
|
e845218d7c | ||
|
|
82ed61c655 | ||
|
|
c0e36231ad | ||
|
|
44b275879b | ||
|
|
a3a8f6217e | ||
|
|
117c3aebda | ||
|
|
a3556acd98 | ||
|
|
5644bc8f01 | ||
|
|
416cc58cce | ||
|
|
ff47956530 | ||
|
|
11e53dd8ef | ||
|
|
f747767aa1 | ||
|
|
7dd480acad | ||
|
|
e3fa87bcc1 | ||
|
|
35028818af | ||
|
|
e4c27de1ec | ||
|
|
15f062d20f | ||
|
|
989b1a8bba | ||
|
|
ff20e1dfbb | ||
|
|
53ea035aea | ||
|
|
cdd7fa81ab | ||
|
|
20929f2a57 | ||
|
|
6564ceda91 | ||
|
|
ec30a504ba | ||
|
|
9cd263b2ce | ||
|
|
701abbb9df | ||
|
|
dad3a26fb6 | ||
|
|
bae93e611d | ||
|
|
3ef716409e | ||
|
|
6cbce110d5 | ||
|
|
aa61824442 | ||
|
|
f1e700ce2f | ||
|
|
ae8c6d95a6 | ||
|
|
4dc33cc143 | ||
|
|
d056c0ddf2 | ||
|
|
c96b2ce8e5 | ||
|
|
028ebb1d0d | ||
|
|
4c1e23ad00 | ||
|
|
a3fc985c90 | ||
|
|
dd40875871 | ||
|
|
341b5b6edf | ||
|
|
4ec6eab004 | ||
|
|
a3572999bb | ||
|
|
6d4f5c94ac | ||
|
|
50e22864cf | ||
|
|
17b9ce89ee | ||
|
|
99ae99e3b9 | ||
|
|
2b13d2c083 | ||
|
|
6c986e9d70 | ||
|
|
e73ab5c0c4 | ||
|
|
2606b0a246 | ||
|
|
d10503aa20 | ||
|
|
a667da0d1a | ||
|
|
283e976252 | ||
|
|
367e7638d7 | ||
|
|
0da9e40abb | ||
|
|
5428229347 | ||
|
|
881c9a009e | ||
|
|
7340c62c47 | ||
|
|
4f2bdebe49 | ||
|
|
a9c9e1bcb3 |
@@ -44,7 +44,7 @@ jobs:
|
|||||||
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> ${GITHUB_ENV}
|
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> ${GITHUB_ENV}
|
||||||
|
|
||||||
- name: Go Release Binaries Large Disk
|
- name: Go Release Binaries Large Disk
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -60,7 +60,7 @@ jobs:
|
|||||||
asset_name: "weed-large-disk-${{ env.BUILD_TIME }}-${{ matrix.goos }}-${{ matrix.goarch }}"
|
asset_name: "weed-large-disk-${{ env.BUILD_TIME }}-${{ matrix.goos }}-${{ matrix.goarch }}"
|
||||||
|
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -93,7 +93,7 @@ jobs:
|
|||||||
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> ${GITHUB_ENV}
|
run: echo BUILD_TIME=$(date -u +%Y%m%d-%H%M) >> ${GITHUB_ENV}
|
||||||
|
|
||||||
- name: Go Release Binaries Large Disk
|
- name: Go Release Binaries Large Disk
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
asset_name: "weed-large-disk-${{ env.BUILD_TIME }}-${{ matrix.goos }}-${{ matrix.goarch }}"
|
asset_name: "weed-large-disk-${{ env.BUILD_TIME }}-${{ matrix.goos }}-${{ matrix.goarch }}"
|
||||||
|
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -30,13 +30,13 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
goarch: ${{ matrix.goarch }}
|
goarch: ${{ matrix.goarch }}
|
||||||
overwrite: true
|
overwrite: true
|
||||||
build_flags: -tags elastic,gocdk,sqlite,ydb,tikv,rclone
|
build_flags: -tags elastic,gocdk,rclone,sqlite,tikv,ydb
|
||||||
pre_command: export CGO_ENABLED=0 && export GODEBUG=http2client=0
|
pre_command: export CGO_ENABLED=0 && export GODEBUG=http2client=0
|
||||||
# build_flags: -tags 5BytesOffset # optional, default is
|
# build_flags: -tags 5BytesOffset # optional, default is
|
||||||
ldflags: -s -w -extldflags -static -X github.com/seaweedfs/seaweedfs/weed/util.COMMIT=${{github.sha}}
|
ldflags: -s -w -extldflags -static -X github.com/seaweedfs/seaweedfs/weed/util.COMMIT=${{github.sha}}
|
||||||
@@ -45,14 +45,14 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}_full"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}_full"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
goarch: ${{ matrix.goarch }}
|
goarch: ${{ matrix.goarch }}
|
||||||
overwrite: true
|
overwrite: true
|
||||||
pre_command: export CGO_ENABLED=0 && export GODEBUG=http2client=0
|
pre_command: export CGO_ENABLED=0 && export GODEBUG=http2client=0
|
||||||
build_flags: -tags 5BytesOffset,elastic,gocdk,sqlite,ydb,tikv,rclone
|
build_flags: -tags 5BytesOffset,elastic,gocdk,rclone,sqlite,tikv,ydb
|
||||||
ldflags: -s -w -extldflags -static -X github.com/seaweedfs/seaweedfs/weed/util.COMMIT=${{github.sha}}
|
ldflags: -s -w -extldflags -static -X github.com/seaweedfs/seaweedfs/weed/util.COMMIT=${{github.sha}}
|
||||||
# Where to run `go build .`
|
# Where to run `go build .`
|
||||||
project_path: weed
|
project_path: weed
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ jobs:
|
|||||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
- uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v2
|
||||||
- name: Go Release Binaries Normal Volume Size
|
- name: Go Release Binaries Normal Volume Size
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
binary_name: weed
|
binary_name: weed
|
||||||
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
asset_name: "${{ matrix.goos }}_${{ matrix.goarch }}"
|
||||||
- name: Go Release Large Disk Binaries
|
- name: Go Release Large Disk Binaries
|
||||||
uses: wangyoucao577/go-release-action@6ac7dba1f9e61850053324549cb6bc88e4b473d2 # v1.22
|
uses: wangyoucao577/go-release-action@481a2c1a0f1be199722e3e9b74d7199acafc30a8 # v1.22
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
goos: ${{ matrix.goos }}
|
goos: ${{ matrix.goos }}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -33,10 +33,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
with:
|
with:
|
||||||
buildkitd-flags: "--debug"
|
buildkitd-flags: "--debug"
|
||||||
-
|
-
|
||||||
@@ -56,7 +56,7 @@ jobs:
|
|||||||
password: ${{ secrets.GHCR_TOKEN }}
|
password: ${{ secrets.GHCR_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -34,10 +34,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
with:
|
with:
|
||||||
buildkitd-flags: "--debug"
|
buildkitd-flags: "--debug"
|
||||||
-
|
-
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
password: ${{ secrets.GHCR_TOKEN }}
|
password: ${{ secrets.GHCR_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -34,10 +34,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
@@ -47,7 +47,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -35,10 +35,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
@@ -48,7 +48,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -35,10 +35,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
@@ -48,7 +48,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -34,10 +34,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
@@ -47,12 +47,12 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
file: ./docker/Dockerfile.go_build
|
file: ./docker/Dockerfile.go_build
|
||||||
build-args: TAGS=elastic,gocdk,sqlite,ydb,tikv,rclone
|
build-args: TAGS=elastic,gocdk,rclone,sqlite,tikv,ydb
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
tags: ${{ steps.docker_meta.outputs.tags }}
|
tags: ${{ steps.docker_meta.outputs.tags }}
|
||||||
labels: ${{ steps.docker_meta.outputs.labels }}
|
labels: ${{ steps.docker_meta.outputs.labels }}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ jobs:
|
|||||||
-
|
-
|
||||||
name: Docker meta
|
name: Docker meta
|
||||||
id: docker_meta
|
id: docker_meta
|
||||||
uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v3
|
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v3
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
chrislusf/seaweedfs
|
chrislusf/seaweedfs
|
||||||
@@ -34,10 +34,10 @@ jobs:
|
|||||||
org.opencontainers.image.vendor=Chris Lu
|
org.opencontainers.image.vendor=Chris Lu
|
||||||
-
|
-
|
||||||
name: Set up QEMU
|
name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v1
|
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v1
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v1
|
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v1
|
||||||
-
|
-
|
||||||
name: Login to Docker Hub
|
name: Login to Docker Hub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
@@ -47,12 +47,12 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
-
|
-
|
||||||
name: Build
|
name: Build
|
||||||
uses: docker/build-push-action@5cd11c3a4ced054e52742c5fd54dca954e0edd85 # v2
|
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v2
|
||||||
with:
|
with:
|
||||||
context: ./docker
|
context: ./docker
|
||||||
push: ${{ github.event_name != 'pull_request' }}
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
file: ./docker/Dockerfile.go_build
|
file: ./docker/Dockerfile.go_build
|
||||||
build-args: TAGS=5BytesOffset,elastic,gocdk,sqlite,ydb,tikv,rclone
|
build-args: TAGS=5BytesOffset,elastic,gocdk,rclone,sqlite,tikv,ydb
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
tags: ${{ steps.docker_meta.outputs.tags }}
|
tags: ${{ steps.docker_meta.outputs.tags }}
|
||||||
labels: ${{ steps.docker_meta.outputs.labels }}
|
labels: ${{ steps.docker_meta.outputs.labels }}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
check-latest: true
|
check-latest: true
|
||||||
|
|
||||||
- name: Set up chart-testing
|
- name: Set up chart-testing
|
||||||
uses: helm/chart-testing-action@v2.6.1
|
uses: helm/chart-testing-action@v2.7.0
|
||||||
|
|
||||||
- name: Run chart-testing (list-changed)
|
- name: Run chart-testing (list-changed)
|
||||||
id: list-changed
|
id: list-changed
|
||||||
@@ -45,7 +45,7 @@ jobs:
|
|||||||
run: ct lint --target-branch ${{ github.event.repository.default_branch }} --all --validate-maintainers=false --chart-dirs k8s/charts
|
run: ct lint --target-branch ${{ github.event.repository.default_branch }} --all --validate-maintainers=false --chart-dirs k8s/charts
|
||||||
|
|
||||||
- name: Create kind cluster
|
- name: Create kind cluster
|
||||||
uses: helm/kind-action@v1.10.0
|
uses: helm/kind-action@v1.12.0
|
||||||
|
|
||||||
- name: Run chart-testing (install)
|
- name: Run chart-testing (install)
|
||||||
run: ct install --target-branch ${{ github.event.repository.default_branch }} --all --chart-dirs k8s/charts
|
run: ct install --target-branch ${{ github.event.repository.default_branch }} --all --chart-dirs k8s/charts
|
||||||
|
|||||||
@@ -186,7 +186,7 @@
|
|||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright 2016 Chris Lu
|
Copyright 2025 Chris Lu
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
.PHONY: test
|
||||||
|
|
||||||
BINARY = weed
|
BINARY = weed
|
||||||
|
|
||||||
SOURCE_DIR = .
|
SOURCE_DIR = .
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.22-alpine as builder
|
FROM golang:1.23-alpine as builder
|
||||||
RUN apk add git g++ fuse
|
RUN apk add git g++ fuse
|
||||||
RUN mkdir -p /go/src/github.com/seaweedfs/
|
RUN mkdir -p /go/src/github.com/seaweedfs/
|
||||||
RUN git clone https://github.com/seaweedfs/seaweedfs /go/src/github.com/seaweedfs/seaweedfs
|
RUN git clone https://github.com/seaweedfs/seaweedfs /go/src/github.com/seaweedfs/seaweedfs
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.22 as builder
|
FROM golang:1.23 as builder
|
||||||
|
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
|
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.22 as builder
|
FROM golang:1.23 as builder
|
||||||
|
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
|
RUN apt-get install -y build-essential libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev liblz4-dev libzstd-dev
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 9333:9333
|
- 9333:9333
|
||||||
- 19333:19333
|
- 19333:19333
|
||||||
command: "-v=1 master -ip=master"
|
command: "-v=1 master -ip=master -volumeSizeLimitMB=10"
|
||||||
volumes:
|
volumes:
|
||||||
- ./tls:/etc/seaweedfs/tls
|
- ./tls:/etc/seaweedfs/tls
|
||||||
env_file:
|
env_file:
|
||||||
@@ -16,7 +16,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 8080:8080
|
- 8080:8080
|
||||||
- 18080:18080
|
- 18080:18080
|
||||||
command: "-v=1 volume -mserver=master:9333 -port=8080 -ip=volume -preStopSeconds=1"
|
command: "-v=1 volume -mserver=master:9333 -port=8080 -ip=volume -preStopSeconds=1 -max=10000"
|
||||||
depends_on:
|
depends_on:
|
||||||
- master
|
- master
|
||||||
volumes:
|
volumes:
|
||||||
@@ -26,10 +26,9 @@ services:
|
|||||||
filer:
|
filer:
|
||||||
image: chrislusf/seaweedfs:local
|
image: chrislusf/seaweedfs:local
|
||||||
ports:
|
ports:
|
||||||
- 8111:8111
|
|
||||||
- 8888:8888
|
- 8888:8888
|
||||||
- 18888:18888
|
- 18888:18888
|
||||||
command: '-v=1 filer -ip.bind=0.0.0.0 -master="master:9333" -iam -iam.ip=filer'
|
command: '-v=1 filer -ip.bind=0.0.0.0 -master="master:9333"'
|
||||||
depends_on:
|
depends_on:
|
||||||
- master
|
- master
|
||||||
- volume
|
- volume
|
||||||
@@ -37,6 +36,19 @@ services:
|
|||||||
- ./tls:/etc/seaweedfs/tls
|
- ./tls:/etc/seaweedfs/tls
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-dev.env}
|
- ${ENV_FILE:-dev.env}
|
||||||
|
|
||||||
|
iam:
|
||||||
|
image: chrislusf/seaweedfs:local
|
||||||
|
ports:
|
||||||
|
- 8111:8111
|
||||||
|
command: '-v=1 iam -filer="filer:8888" -master="master:9333"'
|
||||||
|
depends_on:
|
||||||
|
- master
|
||||||
|
- volume
|
||||||
|
- filer
|
||||||
|
volumes:
|
||||||
|
- ./tls:/etc/seaweedfs/tls
|
||||||
|
|
||||||
s3:
|
s3:
|
||||||
image: chrislusf/seaweedfs:local
|
image: chrislusf/seaweedfs:local
|
||||||
ports:
|
ports:
|
||||||
@@ -50,6 +62,7 @@ services:
|
|||||||
- ./tls:/etc/seaweedfs/tls
|
- ./tls:/etc/seaweedfs/tls
|
||||||
env_file:
|
env_file:
|
||||||
- ${ENV_FILE:-dev.env}
|
- ${ENV_FILE:-dev.env}
|
||||||
|
|
||||||
mount:
|
mount:
|
||||||
image: chrislusf/seaweedfs:local
|
image: chrislusf/seaweedfs:local
|
||||||
privileged: true
|
privileged: true
|
||||||
|
|||||||
Executable
+274
@@ -0,0 +1,274 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# /// script
|
||||||
|
# requires-python = ">=3.12"
|
||||||
|
# dependencies = [
|
||||||
|
# "boto3",
|
||||||
|
# ]
|
||||||
|
# ///
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
import subprocess
|
||||||
|
from enum import Enum
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import boto3
|
||||||
|
|
||||||
|
REGION_NAME = "us-east-1"
|
||||||
|
|
||||||
|
|
||||||
|
class Actions(str, Enum):
|
||||||
|
Get = "Get"
|
||||||
|
Put = "Put"
|
||||||
|
List = "List"
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_dir(bucket_name, user, with_bucket=True):
|
||||||
|
if with_bucket:
|
||||||
|
return f"{bucket_name}/user-id-{user}"
|
||||||
|
|
||||||
|
return f"user-id-{user}"
|
||||||
|
|
||||||
|
|
||||||
|
def create_power_user():
|
||||||
|
power_user_key = "power_user_key"
|
||||||
|
power_user_secret = "power_user_secret"
|
||||||
|
command = f"s3.configure -apply -user poweruser -access_key {power_user_key} -secret_key {power_user_secret} -actions Admin"
|
||||||
|
print("Creating Power User...")
|
||||||
|
subprocess.run(
|
||||||
|
["docker", "exec", "-i", "seaweedfs-master-1", "weed", "shell"],
|
||||||
|
input=command,
|
||||||
|
text=True,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
)
|
||||||
|
print(
|
||||||
|
f"Power User created with key: {power_user_key} and secret: {power_user_secret}"
|
||||||
|
)
|
||||||
|
return power_user_key, power_user_secret
|
||||||
|
|
||||||
|
|
||||||
|
def create_bucket(s3_client, bucket_name):
|
||||||
|
print(f"Creating Bucket {bucket_name}...")
|
||||||
|
s3_client.create_bucket(Bucket=bucket_name)
|
||||||
|
print(f"Bucket {bucket_name} created.")
|
||||||
|
|
||||||
|
|
||||||
|
def upload_file(s3_client, bucket_name, user, file_path, custom_remote_path=None):
|
||||||
|
user_dir = get_user_dir(bucket_name, user, with_bucket=False)
|
||||||
|
if custom_remote_path:
|
||||||
|
remote_path = custom_remote_path
|
||||||
|
else:
|
||||||
|
remote_path = f"{user_dir}/{str(Path(file_path).name)}"
|
||||||
|
|
||||||
|
print(f"Uploading {file_path} for {user}... on {user_dir}")
|
||||||
|
|
||||||
|
s3_client.upload_file(file_path, bucket_name, remote_path)
|
||||||
|
print(f"File {file_path} uploaded for {user}.")
|
||||||
|
|
||||||
|
|
||||||
|
def create_user(iam_client, user):
|
||||||
|
print(f"Creating user {user}...")
|
||||||
|
response = iam_client.create_access_key(UserName=user)
|
||||||
|
print(
|
||||||
|
f"User {user} created with access key: {response['AccessKey']['AccessKeyId']}"
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def list_files(s3_client, bucket_name, path=None):
|
||||||
|
if path is None:
|
||||||
|
path = ""
|
||||||
|
print(f"Listing files of s3://{bucket_name}/{path}...")
|
||||||
|
try:
|
||||||
|
response = s3_client.list_objects_v2(Bucket=bucket_name, Prefix=path)
|
||||||
|
if "Contents" in response:
|
||||||
|
for obj in response["Contents"]:
|
||||||
|
print(f"\t - {obj['Key']}")
|
||||||
|
else:
|
||||||
|
print("No files found.")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error listing files: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def create_policy_for_user(
|
||||||
|
iam_client, user, bucket_name, actions=[Actions.Get, Actions.List]
|
||||||
|
):
|
||||||
|
print(f"Creating policy for {user} on {bucket_name}...")
|
||||||
|
policy_document = {
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Action": [f"s3:{action.value}*" for action in actions],
|
||||||
|
"Resource": [
|
||||||
|
f"arn:aws:s3:::{get_user_dir(bucket_name, user)}/*",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
policy_name = f"{user}-{bucket_name}-full-access"
|
||||||
|
|
||||||
|
policy_json = json.dumps(policy_document)
|
||||||
|
filepath = f"/tmp/{policy_name}.json"
|
||||||
|
with open(filepath, "w") as f:
|
||||||
|
f.write(json.dumps(policy_document, indent=2))
|
||||||
|
|
||||||
|
iam_client.put_user_policy(
|
||||||
|
PolicyName=policy_name, PolicyDocument=policy_json, UserName=user
|
||||||
|
)
|
||||||
|
print(f"Policy for {user} on {bucket_name} created.")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="SeaweedFS S3 Test Script")
|
||||||
|
parser.add_argument(
|
||||||
|
"--s3-url", default="http://127.0.0.1:8333", help="S3 endpoint URL"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--iam-url", default="http://127.0.0.1:8111", help="IAM endpoint URL"
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
bucket_name = (
|
||||||
|
f"test-bucket-{''.join(random.choices(string.digits + 'abcdef', k=8))}"
|
||||||
|
)
|
||||||
|
sentinel_file = "/tmp/SENTINEL"
|
||||||
|
with open(sentinel_file, "w") as f:
|
||||||
|
f.write("Hello World")
|
||||||
|
print(f"SENTINEL file created at {sentinel_file}")
|
||||||
|
|
||||||
|
power_user_key, power_user_secret = create_power_user()
|
||||||
|
|
||||||
|
admin_s3_client = get_s3_client(args, power_user_key, power_user_secret)
|
||||||
|
iam_client = get_iam_client(args, power_user_key, power_user_secret)
|
||||||
|
|
||||||
|
create_bucket(admin_s3_client, bucket_name)
|
||||||
|
upload_file(admin_s3_client, bucket_name, "Alice", sentinel_file)
|
||||||
|
upload_file(admin_s3_client, bucket_name, "Bob", sentinel_file)
|
||||||
|
list_files(admin_s3_client, bucket_name)
|
||||||
|
|
||||||
|
alice_user_info = create_user(iam_client, "Alice")
|
||||||
|
bob_user_info = create_user(iam_client, "Bob")
|
||||||
|
|
||||||
|
alice_key = alice_user_info["AccessKey"]["AccessKeyId"]
|
||||||
|
alice_secret = alice_user_info["AccessKey"]["SecretAccessKey"]
|
||||||
|
bob_key = bob_user_info["AccessKey"]["AccessKeyId"]
|
||||||
|
bob_secret = bob_user_info["AccessKey"]["SecretAccessKey"]
|
||||||
|
|
||||||
|
# Make sure Admin can read any files
|
||||||
|
list_files(admin_s3_client, bucket_name)
|
||||||
|
list_files(
|
||||||
|
admin_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Alice", with_bucket=False),
|
||||||
|
)
|
||||||
|
list_files(
|
||||||
|
admin_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Bob", with_bucket=False),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create read policy for Alice and Bob
|
||||||
|
create_policy_for_user(iam_client, "Alice", bucket_name)
|
||||||
|
create_policy_for_user(iam_client, "Bob", bucket_name)
|
||||||
|
|
||||||
|
alice_s3_client = get_s3_client(args, alice_key, alice_secret)
|
||||||
|
|
||||||
|
# Make sure Alice can read her files
|
||||||
|
list_files(
|
||||||
|
alice_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Alice", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Make sure Bob can read his files
|
||||||
|
bob_s3_client = get_s3_client(args, bob_key, bob_secret)
|
||||||
|
list_files(
|
||||||
|
bob_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Bob", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Update policy to include write
|
||||||
|
create_policy_for_user(iam_client, "Alice", bucket_name, actions=[Actions.Put, Actions.Get, Actions.List]) # fmt: off
|
||||||
|
create_policy_for_user(iam_client, "Bob", bucket_name, actions=[Actions.Put, Actions.Get, Actions.List]) # fmt: off
|
||||||
|
|
||||||
|
print("############################# Make sure Alice can write her files")
|
||||||
|
upload_file(
|
||||||
|
alice_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
"Alice",
|
||||||
|
sentinel_file,
|
||||||
|
custom_remote_path=f"{get_user_dir(bucket_name, 'Alice', with_bucket=False)}/SENTINEL_by_Alice",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
print("############################# Make sure Bob can write his files")
|
||||||
|
upload_file(
|
||||||
|
bob_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
"Bob",
|
||||||
|
sentinel_file,
|
||||||
|
custom_remote_path=f"{get_user_dir(bucket_name, 'Bob', with_bucket=False)}/SENTINEL_by_Bob",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
print("############################# Make sure Alice can read her new files")
|
||||||
|
list_files(
|
||||||
|
alice_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Alice", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
print("############################# Make sure Bob can read his new files")
|
||||||
|
list_files(
|
||||||
|
bob_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Bob", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
print("############################# Make sure Bob cannot read Alice's files")
|
||||||
|
list_files(
|
||||||
|
bob_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Alice", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
print("############################# Make sure Alice cannot read Bob's files")
|
||||||
|
|
||||||
|
list_files(
|
||||||
|
alice_s3_client,
|
||||||
|
bucket_name,
|
||||||
|
get_user_dir(bucket_name, "Bob", with_bucket=False) + "/",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_iam_client(args, access_key, secret_key):
|
||||||
|
iam_client = boto3.client(
|
||||||
|
"iam",
|
||||||
|
endpoint_url=args.iam_url,
|
||||||
|
region_name=REGION_NAME,
|
||||||
|
aws_access_key_id=access_key,
|
||||||
|
aws_secret_access_key=secret_key,
|
||||||
|
)
|
||||||
|
return iam_client
|
||||||
|
|
||||||
|
|
||||||
|
def get_s3_client(args, access_key, secret_key):
|
||||||
|
s3_client = boto3.client(
|
||||||
|
"s3",
|
||||||
|
endpoint_url=args.s3_url,
|
||||||
|
region_name=REGION_NAME,
|
||||||
|
aws_access_key_id=access_key,
|
||||||
|
aws_secret_access_key=secret_key,
|
||||||
|
)
|
||||||
|
return s3_client
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
module github.com/seaweedfs/seaweedfs
|
module github.com/seaweedfs/seaweedfs
|
||||||
|
|
||||||
go 1.22.0
|
go 1.23
|
||||||
|
|
||||||
|
toolchain go1.23.3
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.115.1 // indirect
|
cloud.google.com/go v0.118.1 // indirect
|
||||||
cloud.google.com/go/pubsub v1.42.0
|
cloud.google.com/go/pubsub v1.47.0
|
||||||
cloud.google.com/go/storage v1.43.0
|
cloud.google.com/go/storage v1.50.0
|
||||||
github.com/Azure/azure-pipeline-go v0.2.3
|
github.com/Azure/azure-pipeline-go v0.2.3
|
||||||
github.com/Azure/azure-storage-blob-go v0.15.0
|
github.com/Azure/azure-storage-blob-go v0.15.0
|
||||||
github.com/Shopify/sarama v1.38.1
|
github.com/Shopify/sarama v1.38.1
|
||||||
github.com/aws/aws-sdk-go v1.55.5
|
github.com/aws/aws-sdk-go v1.55.6
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bwmarrin/snowflake v0.3.0
|
github.com/bwmarrin/snowflake v0.3.0
|
||||||
github.com/cenkalti/backoff/v4 v4.3.0
|
github.com/cenkalti/backoff/v4 v4.3.0
|
||||||
@@ -27,19 +29,19 @@ require (
|
|||||||
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
|
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
|
||||||
github.com/facebookgo/stats v0.0.0-20151006221625-1b76add642e4
|
github.com/facebookgo/stats v0.0.0-20151006221625-1b76add642e4
|
||||||
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 // indirect
|
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 // indirect
|
||||||
github.com/fclairamb/ftpserverlib v0.24.1
|
github.com/fclairamb/ftpserverlib v0.25.0
|
||||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
github.com/go-redsync/redsync/v4 v4.13.0
|
github.com/go-redsync/redsync/v4 v4.13.0
|
||||||
github.com/go-sql-driver/mysql v1.8.1
|
github.com/go-sql-driver/mysql v1.8.1
|
||||||
github.com/go-zookeeper/zk v1.0.3 // indirect
|
github.com/go-zookeeper/zk v1.0.3 // indirect
|
||||||
github.com/gocql/gocql v1.6.0
|
github.com/gocql/gocql v1.7.0
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/golang/protobuf v1.5.4
|
github.com/golang/protobuf v1.5.4
|
||||||
github.com/golang/snappy v0.0.4 // indirect
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
github.com/google/btree v1.1.3
|
github.com/google/btree v1.1.3
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/google/wire v0.6.0 // indirect
|
github.com/google/wire v0.6.0 // indirect
|
||||||
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
|
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
||||||
github.com/gorilla/mux v1.8.1
|
github.com/gorilla/mux v1.8.1
|
||||||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
|
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
@@ -53,10 +55,10 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/karlseguin/ccache/v2 v2.0.8
|
github.com/karlseguin/ccache/v2 v2.0.8
|
||||||
github.com/klauspost/compress v1.17.9 // indirect
|
github.com/klauspost/compress v1.17.9 // indirect
|
||||||
github.com/klauspost/reedsolomon v1.12.3
|
github.com/klauspost/reedsolomon v1.12.4
|
||||||
github.com/kurin/blazer v0.5.3
|
github.com/kurin/blazer v0.5.3
|
||||||
github.com/lib/pq v1.10.9
|
github.com/lib/pq v1.10.9
|
||||||
github.com/linxGnu/grocksdb v1.9.2
|
github.com/linxGnu/grocksdb v1.9.8
|
||||||
github.com/magiconair/properties v1.8.7 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-ieproxy v0.0.11 // indirect
|
github.com/mattn/go-ieproxy v0.0.11 // indirect
|
||||||
@@ -70,7 +72,7 @@ require (
|
|||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/posener/complete v1.2.3
|
github.com/posener/complete v1.2.3
|
||||||
github.com/pquerna/cachecontrol v0.2.0
|
github.com/pquerna/cachecontrol v0.2.0
|
||||||
github.com/prometheus/client_golang v1.20.3
|
github.com/prometheus/client_golang v1.20.5
|
||||||
github.com/prometheus/client_model v0.6.1 // indirect
|
github.com/prometheus/client_model v0.6.1 // indirect
|
||||||
github.com/prometheus/common v0.55.0 // indirect
|
github.com/prometheus/common v0.55.0 // indirect
|
||||||
github.com/prometheus/procfs v0.15.1
|
github.com/prometheus/procfs v0.15.1
|
||||||
@@ -82,10 +84,10 @@ require (
|
|||||||
github.com/spf13/afero v1.11.0 // indirect
|
github.com/spf13/afero v1.11.0 // indirect
|
||||||
github.com/spf13/cast v1.6.0 // indirect
|
github.com/spf13/cast v1.6.0 // indirect
|
||||||
github.com/spf13/viper v1.19.0
|
github.com/spf13/viper v1.19.0
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203
|
github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203
|
||||||
github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965
|
github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965
|
||||||
github.com/tidwall/gjson v1.17.3
|
github.com/tidwall/gjson v1.18.0
|
||||||
github.com/tidwall/match v1.1.1
|
github.com/tidwall/match v1.1.1
|
||||||
github.com/tidwall/pretty v1.2.0 // indirect
|
github.com/tidwall/pretty v1.2.0 // indirect
|
||||||
github.com/tsuna/gohbase v0.0.0-20201125011725-348991136365
|
github.com/tsuna/gohbase v0.0.0-20201125011725-348991136365
|
||||||
@@ -95,73 +97,74 @@ require (
|
|||||||
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||||
github.com/xdg-go/scram v1.1.2 // indirect
|
github.com/xdg-go/scram v1.1.2 // indirect
|
||||||
github.com/xdg-go/stringprep v1.0.4 // indirect
|
github.com/xdg-go/stringprep v1.0.4 // indirect
|
||||||
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
|
||||||
go.etcd.io/etcd/client/v3 v3.5.15
|
go.etcd.io/etcd/client/v3 v3.5.18
|
||||||
go.mongodb.org/mongo-driver v1.16.0
|
go.mongodb.org/mongo-driver v1.17.2
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
gocloud.dev v0.39.0
|
gocloud.dev v0.40.0
|
||||||
gocloud.dev/pubsub/natspubsub v0.39.0
|
gocloud.dev/pubsub/natspubsub v0.40.0
|
||||||
gocloud.dev/pubsub/rabbitpubsub v0.39.0
|
gocloud.dev/pubsub/rabbitpubsub v0.40.0
|
||||||
golang.org/x/crypto v0.27.0 // indirect
|
golang.org/x/crypto v0.33.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
|
||||||
golang.org/x/image v0.18.0
|
golang.org/x/image v0.23.0
|
||||||
golang.org/x/net v0.29.0
|
golang.org/x/net v0.35.0
|
||||||
golang.org/x/oauth2 v0.22.0 // indirect
|
golang.org/x/oauth2 v0.26.0 // indirect
|
||||||
golang.org/x/sys v0.25.0
|
golang.org/x/sys v0.30.0
|
||||||
golang.org/x/text v0.18.0 // indirect
|
golang.org/x/text v0.22.0 // indirect
|
||||||
golang.org/x/tools v0.24.0
|
golang.org/x/tools v0.30.0
|
||||||
golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect
|
golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect
|
||||||
google.golang.org/api v0.195.0
|
google.golang.org/api v0.221.0
|
||||||
google.golang.org/genproto v0.0.0-20240823204242-4ba0660f739c // indirect
|
google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect
|
||||||
google.golang.org/grpc v1.65.0
|
google.golang.org/grpc v1.70.0
|
||||||
google.golang.org/protobuf v1.34.2
|
google.golang.org/protobuf v1.36.5
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
modernc.org/b v1.0.0 // indirect
|
modernc.org/b v1.0.0 // indirect
|
||||||
modernc.org/mathutil v1.6.0
|
modernc.org/mathutil v1.7.1
|
||||||
modernc.org/memory v1.8.0 // indirect
|
modernc.org/memory v1.8.0 // indirect
|
||||||
modernc.org/sqlite v1.33.0
|
modernc.org/sqlite v1.34.5
|
||||||
modernc.org/strutil v1.2.0
|
modernc.org/strutil v1.2.1
|
||||||
modernc.org/token v1.1.0 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Jille/raft-grpc-transport v1.6.1
|
github.com/Jille/raft-grpc-transport v1.6.1
|
||||||
github.com/arangodb/go-driver v1.6.2
|
github.com/arangodb/go-driver v1.6.5
|
||||||
github.com/armon/go-metrics v0.4.1
|
github.com/armon/go-metrics v0.4.1
|
||||||
github.com/aws/aws-sdk-go-v2 v1.30.5
|
github.com/aws/aws-sdk-go-v2 v1.36.1
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.27.33
|
github.com/aws/aws-sdk-go-v2/config v1.29.1
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.32
|
github.com/aws/aws-sdk-go-v2/credentials v1.17.59
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.61.2
|
github.com/aws/aws-sdk-go-v2/service/s3 v1.76.0
|
||||||
github.com/cognusion/imaging v1.0.1
|
github.com/cognusion/imaging v1.0.1
|
||||||
github.com/fluent/fluent-logger-golang v1.9.0
|
github.com/fluent/fluent-logger-golang v1.9.0
|
||||||
github.com/getsentry/sentry-go v0.28.1
|
github.com/getsentry/sentry-go v0.31.1
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.1
|
github.com/golang-jwt/jwt/v5 v5.2.1
|
||||||
github.com/google/flatbuffers/go v0.0.0-20230108230133-3b8644d32c50
|
github.com/google/flatbuffers/go v0.0.0-20230108230133-3b8644d32c50
|
||||||
github.com/hanwen/go-fuse/v2 v2.5.1
|
github.com/hanwen/go-fuse/v2 v2.7.2
|
||||||
github.com/hashicorp/raft v1.7.1
|
github.com/hashicorp/raft v1.7.2
|
||||||
github.com/hashicorp/raft-boltdb/v2 v2.3.0
|
github.com/hashicorp/raft-boltdb/v2 v2.3.1
|
||||||
github.com/orcaman/concurrent-map/v2 v2.0.1
|
github.com/orcaman/concurrent-map/v2 v2.0.1
|
||||||
github.com/parquet-go/parquet-go v0.23.0
|
github.com/parquet-go/parquet-go v0.24.0
|
||||||
github.com/rabbitmq/amqp091-go v1.10.0
|
github.com/rabbitmq/amqp091-go v1.10.0
|
||||||
github.com/rclone/rclone v1.67.0
|
github.com/rclone/rclone v1.68.2
|
||||||
github.com/rdleal/intervalst v1.4.0
|
github.com/rdleal/intervalst v1.4.1
|
||||||
github.com/redis/go-redis/v9 v9.6.1
|
github.com/redis/go-redis/v9 v9.7.0
|
||||||
github.com/schollz/progressbar/v3 v3.14.4
|
github.com/schollz/progressbar/v3 v3.18.0
|
||||||
github.com/shirou/gopsutil/v3 v3.24.5
|
github.com/shirou/gopsutil/v3 v3.24.5
|
||||||
github.com/tikv/client-go/v2 v2.0.7
|
github.com/tikv/client-go/v2 v2.0.7
|
||||||
github.com/ydb-platform/ydb-go-sdk-auth-environ v0.5.0
|
github.com/ydb-platform/ydb-go-sdk-auth-environ v0.5.0
|
||||||
github.com/ydb-platform/ydb-go-sdk/v3 v3.77.1
|
github.com/ydb-platform/ydb-go-sdk/v3 v3.99.10
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.15
|
go.etcd.io/etcd/client/pkg/v3 v3.5.18
|
||||||
go.uber.org/atomic v1.11.0
|
go.uber.org/atomic v1.11.0
|
||||||
golang.org/x/sync v0.8.0
|
golang.org/x/sync v0.11.0
|
||||||
google.golang.org/grpc/security/advancedtls v1.0.0
|
google.golang.org/grpc/security/advancedtls v1.0.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go/auth v0.9.1 // indirect
|
cel.dev/expr v0.19.0 // indirect
|
||||||
cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
|
cloud.google.com/go/auth v0.14.1 // indirect
|
||||||
cloud.google.com/go/compute/metadata v0.5.0 // indirect
|
cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
|
||||||
cloud.google.com/go/iam v1.1.13 // indirect
|
cloud.google.com/go/compute/metadata v0.6.0 // indirect
|
||||||
|
cloud.google.com/go/iam v1.3.1 // indirect
|
||||||
|
cloud.google.com/go/monitoring v1.23.0 // indirect
|
||||||
filippo.io/edwards25519 v1.1.0 // indirect
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect
|
||||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect
|
||||||
@@ -170,6 +173,10 @@ require (
|
|||||||
github.com/Azure/azure-sdk-for-go/sdk/storage/azfile v1.2.2 // indirect
|
github.com/Azure/azure-sdk-for-go/sdk/storage/azfile v1.2.2 // indirect
|
||||||
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
|
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
|
||||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
|
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
|
||||||
|
github.com/Files-com/files-sdk-go/v3 v3.2.34 // indirect
|
||||||
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect
|
||||||
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect
|
||||||
|
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect
|
||||||
github.com/Max-Sum/base32768 v0.0.0-20230304063302-18e6ce5945fd // indirect
|
github.com/Max-Sum/base32768 v0.0.0-20230304063302-18e6ce5945fd // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||||
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf // indirect
|
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf // indirect
|
||||||
@@ -179,33 +186,38 @@ require (
|
|||||||
github.com/ProtonMail/go-srp v0.0.7 // indirect
|
github.com/ProtonMail/go-srp v0.0.7 // indirect
|
||||||
github.com/ProtonMail/gopenpgp/v2 v2.7.4 // indirect
|
github.com/ProtonMail/gopenpgp/v2 v2.7.4 // indirect
|
||||||
github.com/PuerkitoBio/goquery v1.8.1 // indirect
|
github.com/PuerkitoBio/goquery v1.8.1 // indirect
|
||||||
github.com/Unknwon/goconfig v1.0.0 // indirect
|
|
||||||
github.com/abbot/go-http-auth v0.4.0 // indirect
|
github.com/abbot/go-http-auth v0.4.0 // indirect
|
||||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||||
github.com/andybalholm/cascadia v1.3.2 // indirect
|
github.com/andybalholm/cascadia v1.3.2 // indirect
|
||||||
|
github.com/appscode/go-querystring v0.0.0-20170504095604-0126cfb3f1dc // indirect
|
||||||
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect
|
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.13 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.17 // indirect
|
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.10 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.17 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.17 // indirect
|
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.19 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.19 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.17 // indirect
|
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sns v1.31.3 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sns v1.31.3 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sqs v1.34.3 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sqs v1.34.3 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.22.7 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.7 // indirect
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.30.7 // indirect
|
github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 // indirect
|
||||||
github.com/aws/smithy-go v1.20.4 // indirect
|
github.com/aws/smithy-go v1.22.2 // indirect
|
||||||
github.com/boltdb/bolt v1.3.1 // indirect
|
github.com/boltdb/bolt v1.3.1 // indirect
|
||||||
github.com/bradenaw/juniper v0.15.2 // indirect
|
github.com/bradenaw/juniper v0.15.2 // indirect
|
||||||
|
github.com/bradfitz/iter v0.0.0-20191230175014-e8f45d346db8 // indirect
|
||||||
github.com/buengese/sgzip v0.1.1 // indirect
|
github.com/buengese/sgzip v0.1.1 // indirect
|
||||||
github.com/calebcase/tmpfile v1.0.3 // indirect
|
github.com/calebcase/tmpfile v1.0.3 // indirect
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
||||||
|
github.com/chilts/sid v0.0.0-20190607042430-660e94789ec9 // indirect
|
||||||
github.com/cloudflare/circl v1.3.7 // indirect
|
github.com/cloudflare/circl v1.3.7 // indirect
|
||||||
github.com/cloudsoda/go-smb2 v0.0.0-20231124195312-f3ec8ae2c891 // indirect
|
github.com/cloudsoda/go-smb2 v0.0.0-20231124195312-f3ec8ae2c891 // indirect
|
||||||
|
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
|
||||||
github.com/colinmarc/hdfs/v2 v2.4.0 // indirect
|
github.com/colinmarc/hdfs/v2 v2.4.0 // indirect
|
||||||
github.com/cronokirby/saferith v0.33.0 // indirect
|
github.com/cronokirby/saferith v0.33.0 // indirect
|
||||||
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
|
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 // indirect
|
||||||
@@ -216,28 +228,33 @@ require (
|
|||||||
github.com/emersion/go-message v0.18.0 // indirect
|
github.com/emersion/go-message v0.18.0 // indirect
|
||||||
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 // indirect
|
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 // indirect
|
||||||
github.com/emersion/go-vcard v0.0.0-20230815062825-8fda7d206ec9 // indirect
|
github.com/emersion/go-vcard v0.0.0-20230815062825-8fda7d206ec9 // indirect
|
||||||
github.com/fatih/color v1.14.1 // indirect
|
github.com/envoyproxy/go-control-plane v0.13.1 // indirect
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
|
||||||
|
github.com/fatih/color v1.16.0 // indirect
|
||||||
github.com/fclairamb/go-log v0.5.0 // indirect
|
github.com/fclairamb/go-log v0.5.0 // indirect
|
||||||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||||
github.com/flynn/noise v1.0.1 // indirect
|
github.com/flynn/noise v1.0.1 // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.4 // indirect
|
||||||
github.com/geoffgarside/ber v1.1.0 // indirect
|
github.com/geoffgarside/ber v1.1.0 // indirect
|
||||||
github.com/go-chi/chi/v5 v5.0.12 // indirect
|
github.com/go-chi/chi/v5 v5.1.0 // indirect
|
||||||
|
github.com/go-darwin/apfs v0.0.0-20211011131704-f84b94dbf348 // indirect
|
||||||
github.com/go-logr/logr v1.4.2 // indirect
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||||
github.com/go-resty/resty/v2 v2.11.0 // indirect
|
github.com/go-resty/resty/v2 v2.11.0 // indirect
|
||||||
github.com/gofrs/flock v0.8.1 // indirect
|
github.com/gofrs/flock v0.8.1 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
||||||
github.com/google/s2a-go v0.1.8 // indirect
|
github.com/google/s2a-go v0.1.9 // indirect
|
||||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
|
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
|
||||||
github.com/hashicorp/go-hclog v1.6.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-hclog v1.6.3 // indirect
|
||||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||||
|
github.com/hashicorp/go-metrics v0.5.4 // indirect
|
||||||
github.com/hashicorp/go-msgpack/v2 v2.1.2 // indirect
|
github.com/hashicorp/go-msgpack/v2 v2.1.2 // indirect
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
|
||||||
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
|
||||||
github.com/henrybear327/Proton-API-Bridge v1.0.0 // indirect
|
github.com/henrybear327/Proton-API-Bridge v1.0.0 // indirect
|
||||||
github.com/henrybear327/go-proton-api v1.0.0 // indirect
|
github.com/henrybear327/go-proton-api v1.0.0 // indirect
|
||||||
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
|
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
|
||||||
@@ -249,14 +266,15 @@ require (
|
|||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
github.com/jtolio/noiseconn v0.0.0-20231127013910-f6d9ecbf1de7 // indirect
|
github.com/jtolio/noiseconn v0.0.0-20231127013910-f6d9ecbf1de7 // indirect
|
||||||
github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 // indirect
|
github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
||||||
github.com/koofr/go-httpclient v0.0.0-20230225102643-5d51a2e9dea6 // indirect
|
github.com/koofr/go-httpclient v0.0.0-20240520111329-e20f8f203988 // indirect
|
||||||
github.com/koofr/go-koofrclient v0.0.0-20221207135200-cbd7fc9ad6a6 // indirect
|
github.com/koofr/go-koofrclient v0.0.0-20221207135200-cbd7fc9ad6a6 // indirect
|
||||||
github.com/kr/fs v0.1.0 // indirect
|
github.com/kr/fs v0.1.0 // indirect
|
||||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
|
github.com/lpar/date v1.0.0 // indirect
|
||||||
github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed // indirect
|
github.com/lufia/plan9stats v0.0.0-20231016141302-07b5767bb0ed // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||||
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
||||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
github.com/montanaflynn/stats v0.7.1 // indirect
|
github.com/montanaflynn/stats v0.7.1 // indirect
|
||||||
@@ -265,11 +283,12 @@ require (
|
|||||||
github.com/nats-io/nkeys v0.4.7 // indirect
|
github.com/nats-io/nkeys v0.4.7 // indirect
|
||||||
github.com/nats-io/nuid v1.0.1 // indirect
|
github.com/nats-io/nuid v1.0.1 // indirect
|
||||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||||
github.com/ncw/swift/v2 v2.0.2 // indirect
|
github.com/ncw/swift/v2 v2.0.3 // indirect
|
||||||
|
github.com/nxadm/tail v1.4.11 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/onsi/gomega v1.27.10 // indirect
|
|
||||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||||
github.com/oracle/oci-go-sdk/v65 v65.65.3 // indirect
|
github.com/oracle/oci-go-sdk/v65 v65.69.2 // indirect
|
||||||
|
github.com/panjf2000/ants/v2 v2.9.1 // indirect
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
|
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||||
github.com/pengsrc/go-shared v0.2.1-0.20190131101655-1999055a4a14 // indirect
|
github.com/pengsrc/go-shared v0.2.1-0.20190131101655-1999055a4a14 // indirect
|
||||||
@@ -282,14 +301,16 @@ require (
|
|||||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
|
||||||
github.com/pkg/sftp v1.13.6 // indirect
|
github.com/pkg/sftp v1.13.6 // indirect
|
||||||
github.com/pkg/xattr v0.4.9 // indirect
|
github.com/pkg/xattr v0.4.9 // indirect
|
||||||
|
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
|
||||||
github.com/putdotio/go-putio/putio v0.0.0-20200123120452-16d982cac2b8 // indirect
|
github.com/putdotio/go-putio/putio v0.0.0-20200123120452-16d982cac2b8 // indirect
|
||||||
github.com/relvacode/iso8601 v1.3.0 // indirect
|
github.com/relvacode/iso8601 v1.3.0 // indirect
|
||||||
github.com/rfjakob/eme v1.1.2 // indirect
|
github.com/rfjakob/eme v1.1.2 // indirect
|
||||||
github.com/rivo/uniseg v0.4.7 // indirect
|
github.com/rivo/uniseg v0.4.7 // indirect
|
||||||
|
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
|
||||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
github.com/segmentio/encoding v0.4.0 // indirect
|
github.com/samber/lo v1.47.0 // indirect
|
||||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
|
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
|
||||||
github.com/smartystreets/goconvey v1.8.1 // indirect
|
github.com/smartystreets/goconvey v1.8.1 // indirect
|
||||||
@@ -305,41 +326,52 @@ require (
|
|||||||
github.com/tklauser/go-sysconf v0.3.13 // indirect
|
github.com/tklauser/go-sysconf v0.3.13 // indirect
|
||||||
github.com/tklauser/numcpus v0.7.0 // indirect
|
github.com/tklauser/numcpus v0.7.0 // indirect
|
||||||
github.com/twmb/murmur3 v1.1.3 // indirect
|
github.com/twmb/murmur3 v1.1.3 // indirect
|
||||||
|
github.com/unknwon/goconfig v1.0.0 // indirect
|
||||||
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
github.com/xanzy/ssh-agent v0.3.3 // indirect
|
||||||
github.com/yandex-cloud/go-genproto v0.0.0-20211115083454-9ca41db5ed9e // indirect
|
github.com/yandex-cloud/go-genproto v0.0.0-20211115083454-9ca41db5ed9e // indirect
|
||||||
github.com/ydb-platform/ydb-go-genproto v0.0.0-20240528144234-5d5a685e41f7 // indirect
|
github.com/ydb-platform/ydb-go-genproto v0.0.0-20241112172322-ea1f63298f77 // indirect
|
||||||
github.com/ydb-platform/ydb-go-yc v0.12.1 // indirect
|
github.com/ydb-platform/ydb-go-yc v0.12.1 // indirect
|
||||||
github.com/ydb-platform/ydb-go-yc-metadata v0.6.1 // indirect
|
github.com/ydb-platform/ydb-go-yc-metadata v0.6.1 // indirect
|
||||||
github.com/yunify/qingstor-sdk-go/v3 v3.2.0 // indirect
|
github.com/yunify/qingstor-sdk-go/v3 v3.2.0 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||||
github.com/zeebo/blake3 v0.2.3 // indirect
|
github.com/zeebo/blake3 v0.2.3 // indirect
|
||||||
github.com/zeebo/errs v1.3.0 // indirect
|
github.com/zeebo/errs v1.3.0 // indirect
|
||||||
go.etcd.io/bbolt v1.3.8 // indirect
|
go.etcd.io/bbolt v1.3.10 // indirect
|
||||||
go.etcd.io/etcd/api/v3 v3.5.15 // indirect
|
go.etcd.io/etcd/api/v3 v3.5.18 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
|
go.opentelemetry.io/contrib/detectors/gcp v1.33.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.28.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.28.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.28.0 // indirect
|
go.opentelemetry.io/otel v1.34.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/metric v1.34.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/trace v1.34.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
go.uber.org/zap v1.27.0 // indirect
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
golang.org/x/mod v0.20.0 // indirect
|
golang.org/x/mod v0.23.0 // indirect
|
||||||
golang.org/x/term v0.24.0 // indirect
|
golang.org/x/term v0.29.0 // indirect
|
||||||
golang.org/x/time v0.6.0 // indirect
|
golang.org/x/time v0.10.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250207221924-e9438ea467c6 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
gopkg.in/validator.v2 v2.0.1 // indirect
|
gopkg.in/validator.v2 v2.0.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect
|
modernc.org/libc v1.55.3 // indirect
|
||||||
storj.io/common v0.0.0-20240424123607-5f226fc92c16 // indirect
|
moul.io/http2curl/v2 v2.3.0 // indirect
|
||||||
storj.io/drpc v0.0.33 // indirect
|
storj.io/common v0.0.0-20240812101423-26b53789c348 // indirect
|
||||||
storj.io/eventkit v0.0.0-20240306141230-6cb545e5f892 // indirect
|
storj.io/drpc v0.0.35-0.20240709171858-0075ac871661 // indirect
|
||||||
|
storj.io/eventkit v0.0.0-20240415002644-1d9596fee086 // indirect
|
||||||
storj.io/infectious v0.0.2 // indirect
|
storj.io/infectious v0.0.2 // indirect
|
||||||
storj.io/picobuf v0.0.3 // indirect
|
storj.io/picobuf v0.0.3 // indirect
|
||||||
storj.io/uplink v1.13.0 // indirect
|
storj.io/uplink v1.13.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
// replace github.com/seaweedfs/raft => /Users/chrislu/go/src/github.com/seaweedfs/raft
|
// replace github.com/seaweedfs/raft => /Users/chrislu/go/src/github.com/seaweedfs/raft
|
||||||
|
|
||||||
|
replace (
|
||||||
|
github.com/boltdb/bolt => go.etcd.io/bbolt v1.3.10
|
||||||
|
go.etcd.io/bbolt => github.com/etcd-io/bbolt v1.3.10
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
description: SeaweedFS
|
description: SeaweedFS
|
||||||
name: seaweedfs
|
name: seaweedfs
|
||||||
appVersion: "3.73"
|
appVersion: "3.85"
|
||||||
# Dev note: Trigger a helm chart release by `git tag -a helm-<version>`
|
# Dev note: Trigger a helm chart release by `git tag -a helm-<version>`
|
||||||
version: 4.0.0
|
version: 4.0.385
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ Here is an example:
|
|||||||
|
|
||||||
to label a node to be able to run all pod types in k8s:
|
to label a node to be able to run all pod types in k8s:
|
||||||
```
|
```
|
||||||
kubectl label node YOUR_NODE_NAME sw-volume=true,sw-backend=true
|
kubectl label node YOUR_NODE_NAME sw-volume=true sw-backend=true
|
||||||
```
|
```
|
||||||
|
|
||||||
on production k8s deployment you will want each pod to have a different host,
|
on production k8s deployment you will want each pod to have a different host,
|
||||||
|
|||||||
@@ -1505,6 +1505,96 @@
|
|||||||
"title": "S3 Request Duration 99th percentile",
|
"title": "S3 Request Duration 99th percentile",
|
||||||
"type": "timeseries"
|
"type": "timeseries"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 36
|
||||||
|
},
|
||||||
|
"id": 84,
|
||||||
|
"links": [],
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "10.3.1",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_received_bytes_total{namespace=\"$NAMESPACE\"}[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "S3 Bucket Traffic Received",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 36
|
||||||
|
},
|
||||||
|
"id": 85,
|
||||||
|
"links": [],
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "10.3.1",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_sent_bytes_total{namespace=\"$NAMESPACE\"}[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "S3 Bucket Traffic Sent",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"datasource": {
|
"datasource": {
|
||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
@@ -1571,7 +1661,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 36
|
"y": 41
|
||||||
},
|
},
|
||||||
"id": 72,
|
"id": 72,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -1689,7 +1779,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 43
|
"y": 50
|
||||||
},
|
},
|
||||||
"id": 73,
|
"id": 73,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -1845,7 +1935,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 50
|
"y": 57
|
||||||
},
|
},
|
||||||
"id": 55,
|
"id": 55,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2002,7 +2092,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 57
|
"y": 64
|
||||||
},
|
},
|
||||||
"hideTimeOverride": false,
|
"hideTimeOverride": false,
|
||||||
"id": 59,
|
"id": 59,
|
||||||
@@ -2074,7 +2164,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 64
|
"y": 71
|
||||||
},
|
},
|
||||||
"id": 62,
|
"id": 62,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -2146,7 +2236,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 65
|
"y": 72
|
||||||
},
|
},
|
||||||
"id": 47,
|
"id": 47,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2289,7 +2379,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 65
|
"y": 72
|
||||||
},
|
},
|
||||||
"id": 40,
|
"id": 40,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2386,7 +2476,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 72
|
"y": 79
|
||||||
},
|
},
|
||||||
"id": 48,
|
"id": 48,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2496,7 +2586,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 79
|
"y": 86
|
||||||
},
|
},
|
||||||
"id": 50,
|
"id": 50,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2598,7 +2688,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 86
|
"y": 93
|
||||||
},
|
},
|
||||||
"id": 51,
|
"id": 51,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2711,7 +2801,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 94
|
"y": 101
|
||||||
},
|
},
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2806,7 +2896,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 94
|
"y": 101
|
||||||
},
|
},
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -2848,7 +2938,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 101
|
"y": 108
|
||||||
},
|
},
|
||||||
"id": 64,
|
"id": 64,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -2921,7 +3011,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 102
|
"y": 109
|
||||||
},
|
},
|
||||||
"id": 52,
|
"id": 52,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -3049,7 +3139,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 102
|
"y": 109
|
||||||
},
|
},
|
||||||
"id": 54,
|
"id": 54,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -3146,7 +3236,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 109
|
"y": 116
|
||||||
},
|
},
|
||||||
"id": 53,
|
"id": 53,
|
||||||
"links": [],
|
"links": [],
|
||||||
@@ -3266,4 +3356,4 @@
|
|||||||
"uid": "a24009d7-cbda-4443-a132-1cc1c4677304",
|
"uid": "a24009d7-cbda-4443-a132-1cc1c4677304",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"weekStart": ""
|
"weekStart": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,14 +134,17 @@ Inject extra environment vars in the format key:value, if populated
|
|||||||
|
|
||||||
{{/* Return the proper imagePullSecrets */}}
|
{{/* Return the proper imagePullSecrets */}}
|
||||||
{{- define "seaweedfs.imagePullSecrets" -}}
|
{{- define "seaweedfs.imagePullSecrets" -}}
|
||||||
{{- if .Values.global.imagePullSecrets }}
|
{{- with .Values.global.imagePullSecrets }}
|
||||||
{{- if kindIs "string" .Values.global.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
imagePullSecrets:
|
||||||
- name: {{ .Values.global.imagePullSecrets }}
|
{{- if kindIs "string" . }}
|
||||||
{{- else }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{- range .Values.global.imagePullSecrets }}
|
|
||||||
- name: {{ . }}
|
- name: {{ . }}
|
||||||
|
{{- else }}
|
||||||
|
{{- range . }}
|
||||||
|
{{- if kindIs "string" . }}
|
||||||
|
- name: {{ . }}
|
||||||
|
{{- else }}
|
||||||
|
- {{ toYaml . }}
|
||||||
|
{{- end}}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: filer
|
app.kubernetes.io/component: filer
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
secretName: {{ template "seaweedfs.name" . }}-filer-cert
|
||||||
issuerRef:
|
issuerRef:
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ metadata:
|
|||||||
{{- if .Values.filer.metricsPort }}
|
{{- if .Values.filer.metricsPort }}
|
||||||
monitoring: "true"
|
monitoring: "true"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
clusterIP: None
|
clusterIP: None
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: filer
|
app.kubernetes.io/component: filer
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
clusterIP: None
|
clusterIP: None
|
||||||
publishNotReadyAddresses: true
|
publishNotReadyAddresses: true
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ metadata:
|
|||||||
{{- with .Values.global.monitoring.additionalLabels }}
|
{{- with .Values.global.monitoring.additionalLabels }}
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
- interval: 30s
|
- interval: 30s
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: filer
|
app.kubernetes.io/component: filer
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
serviceName: {{ template "seaweedfs.name" . }}-filer
|
serviceName: {{ template "seaweedfs.name" . }}-filer
|
||||||
podManagementPolicy: {{ .Values.filer.podManagementPolicy }}
|
podManagementPolicy: {{ .Values.filer.podManagementPolicy }}
|
||||||
@@ -57,6 +61,10 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
{{ tpl .Values.filer.affinity . | nindent 8 | trim }}
|
{{ tpl .Values.filer.affinity . | nindent 8 | trim }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- with .Values.filer.topologySpreadConstraints }}
|
||||||
|
topologySpreadConstraints:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.filer.tolerations }}
|
{{- if .Values.filer.tolerations }}
|
||||||
tolerations:
|
tolerations:
|
||||||
{{ tpl .Values.filer.tolerations . | nindent 8 | trim }}
|
{{ tpl .Values.filer.tolerations . | nindent 8 | trim }}
|
||||||
@@ -182,6 +190,12 @@ spec:
|
|||||||
{{- if .Values.filer.filerGroup}}
|
{{- if .Values.filer.filerGroup}}
|
||||||
-filerGroup={{ .Values.filer.filerGroup}} \
|
-filerGroup={{ .Values.filer.filerGroup}} \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.filer.rack }}
|
||||||
|
-rack={{ .Values.filer.rack }} \
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.filer.dataCenter }}
|
||||||
|
-dataCenter={{ .Values.filer.dataCenter }} \
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.filer.s3.enabled }}
|
{{- if .Values.filer.s3.enabled }}
|
||||||
-s3 \
|
-s3 \
|
||||||
-s3.port={{ .Values.filer.s3.port }} \
|
-s3.port={{ .Values.filer.s3.port }} \
|
||||||
@@ -195,7 +209,7 @@ spec:
|
|||||||
-s3.cert.file=/usr/local/share/ca-certificates/client/tls.crt \
|
-s3.cert.file=/usr/local/share/ca-certificates/client/tls.crt \
|
||||||
-s3.key.file=/usr/local/share/ca-certificates/client/tls.key \
|
-s3.key.file=/usr/local/share/ca-certificates/client/tls.key \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.filer.s3.allowEmptyFolder }}
|
{{- if eq (typeOf .Values.filer.s3.allowEmptyFolder) "bool" }}
|
||||||
-s3.allowEmptyFolder={{ .Values.filer.s3.allowEmptyFolder }} \
|
-s3.allowEmptyFolder={{ .Values.filer.s3.allowEmptyFolder }} \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.filer.s3.enableAuth }}
|
{{- if .Values.filer.s3.enableAuth }}
|
||||||
@@ -220,6 +234,12 @@ spec:
|
|||||||
- name: data-filer
|
- name: data-filer
|
||||||
mountPath: /data
|
mountPath: /data
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.filer.notificationConfig }}
|
||||||
|
- name: notification-config
|
||||||
|
readOnly: true
|
||||||
|
mountPath: /etc/seaweedfs/notification.toml
|
||||||
|
subPath: notification.toml
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.global.enableSecurity }}
|
{{- if .Values.global.enableSecurity }}
|
||||||
- name: security-config
|
- name: security-config
|
||||||
readOnly: true
|
readOnly: true
|
||||||
@@ -249,6 +269,14 @@ spec:
|
|||||||
name: metrics
|
name: metrics
|
||||||
- containerPort: {{ .Values.filer.grpcPort }}
|
- containerPort: {{ .Values.filer.grpcPort }}
|
||||||
#name: swfs-filer-grpc
|
#name: swfs-filer-grpc
|
||||||
|
{{- if .Values.filer.s3.enabled }}
|
||||||
|
- containerPort: {{ .Values.filer.s3.port }}
|
||||||
|
name: swfs-s3
|
||||||
|
{{- if .Values.filer.s3.httpsPort }}
|
||||||
|
- containerPort: {{ .Values.filer.s3.httpsPort }}
|
||||||
|
name: swfs-s3-tls
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.filer.readinessProbe.enabled }}
|
{{- if .Values.filer.readinessProbe.enabled }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
@@ -327,6 +355,11 @@ spec:
|
|||||||
secretName: seaweedfs-s3-secret
|
secretName: seaweedfs-s3-secret
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.filer.notificationConfig }}
|
||||||
|
- name: notification-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-notification-config
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.global.enableSecurity }}
|
{{- if .Values.global.enableSecurity }}
|
||||||
- name: security-config
|
- name: security-config
|
||||||
configMap:
|
configMap:
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: master
|
app.kubernetes.io/component: master
|
||||||
|
{{- if .Values.master.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.master.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
secretName: {{ template "seaweedfs.name" . }}-master-cert
|
||||||
issuerRef:
|
issuerRef:
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ metadata:
|
|||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.master.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.master.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
data:
|
data:
|
||||||
master.toml: |-
|
master.toml: |-
|
||||||
{{ .Values.master.config | nindent 4 }}
|
{{ .Values.master.config | nindent 4 }}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
annotations:
|
annotations:
|
||||||
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
||||||
|
{{- if .Values.master.annotations }}
|
||||||
|
{{- toYaml .Values.master.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
clusterIP: None
|
clusterIP: None
|
||||||
publishNotReadyAddresses: true
|
publishNotReadyAddresses: true
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ metadata:
|
|||||||
{{- with .Values.global.monitoring.additionalLabels }}
|
{{- with .Values.global.monitoring.additionalLabels }}
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.master.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.master.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
- interval: 30s
|
- interval: 30s
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ metadata:
|
|||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.master.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.master.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
serviceName: {{ template "seaweedfs.name" . }}-master
|
serviceName: {{ template "seaweedfs.name" . }}-master
|
||||||
podManagementPolicy: {{ .Values.master.podManagementPolicy }}
|
podManagementPolicy: {{ .Values.master.podManagementPolicy }}
|
||||||
@@ -50,6 +54,10 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
{{ tpl .Values.master.affinity . | nindent 8 | trim }}
|
{{ tpl .Values.master.affinity . | nindent 8 | trim }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- with .Values.master.topologySpreadConstraints }}
|
||||||
|
topologySpreadConstraints:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.master.tolerations }}
|
{{- if .Values.master.tolerations }}
|
||||||
tolerations:
|
tolerations:
|
||||||
{{ tpl .Values.master.tolerations . | nindent 8 | trim }}
|
{{ tpl .Values.master.tolerations . | nindent 8 | trim }}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{{- if and .Values.filer.enabled .Values.filer.notificationConfig }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "seaweedfs.name" . }}-notification-config
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.filer.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.filer.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
data:
|
||||||
|
notification.toml: |-
|
||||||
|
{{ .Values.filer.notificationConfig | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
@@ -32,9 +32,9 @@ spec:
|
|||||||
- name: WEED_CLUSTER_DEFAULT
|
- name: WEED_CLUSTER_DEFAULT
|
||||||
value: "sw"
|
value: "sw"
|
||||||
- name: WEED_CLUSTER_SW_MASTER
|
- name: WEED_CLUSTER_SW_MASTER
|
||||||
value: "{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}:9333"
|
value: "{{ template "seaweedfs.name" . }}-master.{{ .Release.Namespace }}:{{ .Values.master.port }}"
|
||||||
- name: WEED_CLUSTER_SW_FILER
|
- name: WEED_CLUSTER_SW_FILER
|
||||||
value: "{{ template "seaweedfs.name" . }}-filer-client.{{ .Release.Namespace }}:8888"
|
value: "{{ template "seaweedfs.name" . }}-filer-client.{{ .Release.Namespace }}:{{ .Values.filer.port }}"
|
||||||
- name: POD_IP
|
- name: POD_IP
|
||||||
valueFrom:
|
valueFrom:
|
||||||
fieldRef:
|
fieldRef:
|
||||||
@@ -53,6 +53,26 @@ spec:
|
|||||||
- "/bin/sh"
|
- "/bin/sh"
|
||||||
- "-ec"
|
- "-ec"
|
||||||
- |
|
- |
|
||||||
|
wait_for_service() {
|
||||||
|
local url=$1
|
||||||
|
local max_attempts=60 # 5 minutes total (5s * 60)
|
||||||
|
local attempt=1
|
||||||
|
|
||||||
|
echo "Waiting for service at $url..."
|
||||||
|
while [ $attempt -le $max_attempts ]; do
|
||||||
|
if wget -q --spider "$url" >/dev/null 2>&1; then
|
||||||
|
echo "Service at $url is up!"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Attempt $attempt: Service not ready yet, retrying in 5s..."
|
||||||
|
sleep 5
|
||||||
|
attempt=$((attempt + 1))
|
||||||
|
done
|
||||||
|
echo "Service at $url failed to become ready within 5 minutes"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
wait_for_service "http://$WEED_CLUSTER_SW_MASTER{{ .Values.master.readinessProbe.httpGet.path }}"
|
||||||
|
wait_for_service "http://$WEED_CLUSTER_SW_FILER{{ .Values.filer.readinessProbe.httpGet.path }}"
|
||||||
{{- range $reg, $props := $.Values.filer.s3.createBuckets }}
|
{{- range $reg, $props := $.Values.filer.s3.createBuckets }}
|
||||||
exec /bin/echo \
|
exec /bin/echo \
|
||||||
"s3.bucket.create --name {{ $props.name }}" |\
|
"s3.bucket.create --name {{ $props.name }}" |\
|
||||||
|
|||||||
@@ -9,12 +9,15 @@ metadata:
|
|||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.s3.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.s3.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
replicas: {{ .Values.s3.replicas }}
|
replicas: {{ .Values.s3.replicas }}
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: s3
|
app.kubernetes.io/component: s3
|
||||||
template:
|
template:
|
||||||
@@ -131,7 +134,7 @@ spec:
|
|||||||
{{- if .Values.s3.domainName }}
|
{{- if .Values.s3.domainName }}
|
||||||
-domainName={{ .Values.s3.domainName }} \
|
-domainName={{ .Values.s3.domainName }} \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.s3.allowEmptyFolder }}
|
{{- if eq (typeOf .Values.s3.allowEmptyFolder) "bool" }}
|
||||||
-allowEmptyFolder={{ .Values.s3.allowEmptyFolder }} \
|
-allowEmptyFolder={{ .Values.s3.allowEmptyFolder }} \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.s3.enableAuth }}
|
{{- if .Values.s3.enableAuth }}
|
||||||
@@ -176,9 +179,13 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: {{ .Values.s3.port }}
|
- containerPort: {{ .Values.s3.port }}
|
||||||
name: swfs-s3
|
name: swfs-s3
|
||||||
|
{{- if .Values.s3.httpsPort }}
|
||||||
|
- containerPort: {{ .Values.s3.httpsPort }}
|
||||||
|
name: swfs-s3-tls
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.s3.metricsPort }}
|
{{- if .Values.s3.metricsPort }}
|
||||||
- containerPort: {{ .Values.s3.metricsPort }}
|
- containerPort: {{ .Values.s3.metricsPort }}
|
||||||
name: "metrics"
|
name: metrics
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.s3.readinessProbe.enabled }}
|
{{- if .Values.s3.readinessProbe.enabled }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ metadata:
|
|||||||
app.kubernetes.io/component: s3
|
app.kubernetes.io/component: s3
|
||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- if .Values.s3.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.s3.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: {{ .Values.s3.internalTrafficPolicy | default "Cluster" }}
|
internalTrafficPolicy: {{ .Values.s3.internalTrafficPolicy | default "Cluster" }}
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ metadata:
|
|||||||
{{- with .Values.global.monitoring.additionalLabels }}
|
{{- with .Values.global.monitoring.additionalLabels }}
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.s3.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.s3.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
- interval: 30s
|
- interval: 30s
|
||||||
@@ -22,8 +26,8 @@ spec:
|
|||||||
scrapeTimeout: 5s
|
scrapeTimeout: 5s
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: {{ template "seaweedfs.name" . }}
|
app.kubernetes.io/name: {{ template "seaweedfs.name" . }}
|
||||||
component: s3
|
app.kubernetes.io/component: s3
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ metadata:
|
|||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
app.kubernetes.io/component: volume
|
app.kubernetes.io/component: volume
|
||||||
|
{{- if .Values.volume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.volume.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
secretName: {{ template "seaweedfs.name" . }}-volume-cert
|
||||||
issuerRef:
|
issuerRef:
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ metadata:
|
|||||||
app.kubernetes.io/component: volume
|
app.kubernetes.io/component: volume
|
||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- if .Values.volume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.volume.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
clusterIP: None
|
clusterIP: None
|
||||||
internalTrafficPolicy: {{ .Values.volume.internalTrafficPolicy | default "Cluster" }}
|
internalTrafficPolicy: {{ .Values.volume.internalTrafficPolicy | default "Cluster" }}
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ metadata:
|
|||||||
{{- with .Values.global.monitoring.additionalLabels }}
|
{{- with .Values.global.monitoring.additionalLabels }}
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- if .Values.volume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.volume.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
endpoints:
|
endpoints:
|
||||||
- interval: 30s
|
- interval: 30s
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ metadata:
|
|||||||
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Values.volume.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml .Values.volume.annotations | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
serviceName: {{ template "seaweedfs.name" . }}-volume
|
serviceName: {{ template "seaweedfs.name" . }}-volume
|
||||||
replicas: {{ .Values.volume.replicas }}
|
replicas: {{ .Values.volume.replicas }}
|
||||||
@@ -43,6 +47,10 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
{{ tpl .Values.volume.affinity . | nindent 8 | trim }}
|
{{ tpl .Values.volume.affinity . | nindent 8 | trim }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- with .Values.volume.topologySpreadConstraints }}
|
||||||
|
topologySpreadConstraints:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
restartPolicy: {{ default .Values.global.restartPolicy .Values.volume.restartPolicy }}
|
restartPolicy: {{ default .Values.global.restartPolicy .Values.volume.restartPolicy }}
|
||||||
{{- if .Values.volume.tolerations }}
|
{{- if .Values.volume.tolerations }}
|
||||||
tolerations:
|
tolerations:
|
||||||
@@ -146,7 +154,9 @@ spec:
|
|||||||
{{- if .Values.volume.idx }}
|
{{- if .Values.volume.idx }}
|
||||||
-dir.idx=/idx \
|
-dir.idx=/idx \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
-max {{range $index, $dir := .Values.volume.dataDirs }}{{if ne $index 0}},{{end}}{{$dir.maxVolumes}}{{end}} \
|
-max {{range $index, $dir := .Values.volume.dataDirs }}{{if ne $index 0}},{{end}}
|
||||||
|
{{- if eq ($dir.maxVolumes | toString) "0" }}0{{ else if not $dir.maxVolumes }}7{{ else }}{{$dir.maxVolumes}}{{ end }}
|
||||||
|
{{- end }} \
|
||||||
{{- if .Values.volume.rack }}
|
{{- if .Values.volume.rack }}
|
||||||
-rack={{ .Values.volume.rack }} \
|
-rack={{ .Values.volume.rack }} \
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -176,9 +186,11 @@ spec:
|
|||||||
-mserver={{ if .Values.global.masterServer }}{{.Values.global.masterServer}}{{ else }}{{ range $index := until (.Values.master.replicas | int) }}${SEAWEEDFS_FULLNAME}-master-{{ $index }}.${SEAWEEDFS_FULLNAME}-master.{{ $.Release.Namespace }}:{{ $.Values.master.port }}{{ if lt $index (sub ($.Values.master.replicas | int) 1) }},{{ end }}{{ end }}{{ end }}
|
-mserver={{ if .Values.global.masterServer }}{{.Values.global.masterServer}}{{ else }}{{ range $index := until (.Values.master.replicas | int) }}${SEAWEEDFS_FULLNAME}-master-{{ $index }}.${SEAWEEDFS_FULLNAME}-master.{{ $.Release.Namespace }}:{{ $.Values.master.port }}{{ if lt $index (sub ($.Values.master.replicas | int) 1) }},{{ end }}{{ end }}{{ end }}
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
{{- range $dir := .Values.volume.dataDirs }}
|
{{- range $dir := .Values.volume.dataDirs }}
|
||||||
|
{{- if not ( eq $dir.type "custom" ) }}
|
||||||
- name: {{ $dir.name }}
|
- name: {{ $dir.name }}
|
||||||
mountPath: "/{{ $dir.name }}/"
|
mountPath: "/{{ $dir.name }}/"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
{{- if .Values.volume.logs }}
|
{{- if .Values.volume.logs }}
|
||||||
- name: logs
|
- name: logs
|
||||||
mountPath: "/logs/"
|
mountPath: "/logs/"
|
||||||
|
|||||||
@@ -140,6 +140,9 @@ master:
|
|||||||
# Annotations to be added to the master pods
|
# Annotations to be added to the master pods
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
|
# Annotations to be added to the master resources
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
## Set podManagementPolicy
|
## Set podManagementPolicy
|
||||||
podManagementPolicy: Parallel
|
podManagementPolicy: Parallel
|
||||||
|
|
||||||
@@ -166,6 +169,11 @@ master:
|
|||||||
app.kubernetes.io/component: master
|
app.kubernetes.io/component: master
|
||||||
topologyKey: kubernetes.io/hostname
|
topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
# Topology Spread Constraints Settings
|
||||||
|
# This should map directly to the value of the topologySpreadConstraints
|
||||||
|
# for a PodSpec. By Default no constraints are set.
|
||||||
|
topologySpreadConstraints: {}
|
||||||
|
|
||||||
# Toleration Settings for master pods
|
# Toleration Settings for master pods
|
||||||
# This should be a multi-line string matching the Toleration array
|
# This should be a multi-line string matching the Toleration array
|
||||||
# in a PodSpec.
|
# in a PodSpec.
|
||||||
@@ -301,6 +309,12 @@ volume:
|
|||||||
# - name: data
|
# - name: data
|
||||||
# type: "emptyDir"
|
# type: "emptyDir"
|
||||||
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
||||||
|
#
|
||||||
|
# If these don't meet your needs, you can use "custom" here along with extraVolumes and extraVolumeMounts
|
||||||
|
# Particularly useful when using more than 1 for the volume server replicas.
|
||||||
|
# - name: data
|
||||||
|
# type: "custom"
|
||||||
|
# maxVolumes: 0 # If set to zero on non-windows OS, the limit will be auto configured. (default "7")
|
||||||
|
|
||||||
dataDirs:
|
dataDirs:
|
||||||
- name: data1
|
- name: data1
|
||||||
@@ -381,6 +395,15 @@ volume:
|
|||||||
sidecars: []
|
sidecars: []
|
||||||
initContainers: ""
|
initContainers: ""
|
||||||
|
|
||||||
|
# Example for use when using more than 1 volume server replica
|
||||||
|
# extraVolumeMounts: |
|
||||||
|
# - name: drive
|
||||||
|
# mountPath: /drive
|
||||||
|
# subPathExpr: $(POD_NAME)
|
||||||
|
# extraVolumes: |
|
||||||
|
# - name: drive
|
||||||
|
# hostPath:
|
||||||
|
# path: /var/mnt/
|
||||||
extraVolumes: ""
|
extraVolumes: ""
|
||||||
extraVolumeMounts: ""
|
extraVolumeMounts: ""
|
||||||
|
|
||||||
@@ -390,6 +413,9 @@ volume:
|
|||||||
# Annotations to be added to the volume pods
|
# Annotations to be added to the volume pods
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
|
# Annotations to be added to the volume resources
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
## Set podManagementPolicy
|
## Set podManagementPolicy
|
||||||
podManagementPolicy: Parallel
|
podManagementPolicy: Parallel
|
||||||
|
|
||||||
@@ -406,6 +432,11 @@ volume:
|
|||||||
app.kubernetes.io/component: volume
|
app.kubernetes.io/component: volume
|
||||||
topologyKey: kubernetes.io/hostname
|
topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
# Topology Spread Constraints Settings
|
||||||
|
# This should map directly to the value of the topologySpreadConstraints
|
||||||
|
# for a PodSpec. By Default no constraints are set.
|
||||||
|
topologySpreadConstraints: {}
|
||||||
|
|
||||||
# Resource requests, limits, etc. for the server cluster placement. This
|
# Resource requests, limits, etc. for the server cluster placement. This
|
||||||
# should map directly to the value of the resources field for a PodSpec,
|
# should map directly to the value of the resources field for a PodSpec,
|
||||||
# formatted as a multi-line string. By default no direct resource request
|
# formatted as a multi-line string. By default no direct resource request
|
||||||
@@ -490,6 +521,10 @@ filer:
|
|||||||
metricsPort: 9327
|
metricsPort: 9327
|
||||||
loggingOverrideLevel: null
|
loggingOverrideLevel: null
|
||||||
filerGroup: ""
|
filerGroup: ""
|
||||||
|
# prefer to read and write to volumes in this data center (not set by default)
|
||||||
|
dataCenter: null
|
||||||
|
# prefer to write to volumes in this rack (not set by default)
|
||||||
|
rack: null
|
||||||
# replication type is XYZ:
|
# replication type is XYZ:
|
||||||
# X number of replica in other data centers
|
# X number of replica in other data centers
|
||||||
# Y number of replica in other racks in the same data center
|
# Y number of replica in other racks in the same data center
|
||||||
@@ -511,6 +546,19 @@ filer:
|
|||||||
# Disable http request, only gRpc operations are allowed
|
# Disable http request, only gRpc operations are allowed
|
||||||
disableHttp: false
|
disableHttp: false
|
||||||
|
|
||||||
|
# Add a custom notification.toml to configure filer notifications
|
||||||
|
# Example:
|
||||||
|
# notificationConfig: |-
|
||||||
|
# [notification.kafka]
|
||||||
|
# enabled = false
|
||||||
|
# hosts = [
|
||||||
|
# "localhost:9092"
|
||||||
|
# ]
|
||||||
|
# topic = "seaweedfs_filer"
|
||||||
|
# offsetFile = "./last.offset"
|
||||||
|
# offsetSaveIntervalSeconds = 10
|
||||||
|
notificationConfig: ""
|
||||||
|
|
||||||
# DEPRECATE: enablePVC, storage, storageClass
|
# DEPRECATE: enablePVC, storage, storageClass
|
||||||
# Consider replacing with filer.data section below instead.
|
# Consider replacing with filer.data section below instead.
|
||||||
|
|
||||||
@@ -584,6 +632,9 @@ filer:
|
|||||||
# Annotations to be added to the filer pods
|
# Annotations to be added to the filer pods
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
|
# Annotations to be added to the filer resource
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
## Set podManagementPolicy
|
## Set podManagementPolicy
|
||||||
podManagementPolicy: Parallel
|
podManagementPolicy: Parallel
|
||||||
|
|
||||||
@@ -600,6 +651,11 @@ filer:
|
|||||||
app.kubernetes.io/component: filer
|
app.kubernetes.io/component: filer
|
||||||
topologyKey: kubernetes.io/hostname
|
topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
# Topology Spread Constraints Settings
|
||||||
|
# This should map directly to the value of the topologySpreadConstraints
|
||||||
|
# for a PodSpec. By Default no constraints are set.
|
||||||
|
topologySpreadConstraints: {}
|
||||||
|
|
||||||
# updatePartition is used to control a careful rolling update of SeaweedFS
|
# updatePartition is used to control a careful rolling update of SeaweedFS
|
||||||
# masters.
|
# masters.
|
||||||
updatePartition: 0
|
updatePartition: 0
|
||||||
@@ -673,7 +729,7 @@ filer:
|
|||||||
sub_filter '/seaweedfsstatic' './seaweedfsstatic';
|
sub_filter '/seaweedfsstatic' './seaweedfsstatic';
|
||||||
sub_filter_once off;
|
sub_filter_once off;
|
||||||
|
|
||||||
# extraEnvVars is a list of extra enviroment variables to set with the stateful set.
|
# extraEnvVars is a list of extra environment variables to set with the stateful set.
|
||||||
extraEnvironmentVars:
|
extraEnvironmentVars:
|
||||||
WEED_MYSQL_ENABLED: "false"
|
WEED_MYSQL_ENABLED: "false"
|
||||||
WEED_MYSQL_HOSTNAME: "mysql-db-host"
|
WEED_MYSQL_HOSTNAME: "mysql-db-host"
|
||||||
@@ -798,6 +854,9 @@ s3:
|
|||||||
# Annotations to be added to the s3 pods
|
# Annotations to be added to the s3 pods
|
||||||
podAnnotations: {}
|
podAnnotations: {}
|
||||||
|
|
||||||
|
# Annotations to be added to the s3 resources
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
# Resource requests, limits, etc. for the server cluster placement. This
|
# Resource requests, limits, etc. for the server cluster placement. This
|
||||||
# should map directly to the value of the resources field for a PodSpec,
|
# should map directly to the value of the resources field for a PodSpec,
|
||||||
# formatted as a multi-line string. By default no direct resource request
|
# formatted as a multi-line string. By default no direct resource request
|
||||||
@@ -895,7 +954,7 @@ s3:
|
|||||||
# For more information, visit: https://container-object-storage-interface.github.io/docs/deployment-guide
|
# For more information, visit: https://container-object-storage-interface.github.io/docs/deployment-guide
|
||||||
cosi:
|
cosi:
|
||||||
enabled: false
|
enabled: false
|
||||||
image: "ghcr.io/seaweedfs/seaweedfs-cosi-driver:v0.1.1"
|
image: "ghcr.io/seaweedfs/seaweedfs-cosi-driver:v0.1.2"
|
||||||
driverName: "seaweedfs.objectstorage.k8s.io"
|
driverName: "seaweedfs.objectstorage.k8s.io"
|
||||||
bucketClassName: "seaweedfs"
|
bucketClassName: "seaweedfs"
|
||||||
endpoint: ""
|
endpoint: ""
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>com.seaweedfs</groupId>
|
<groupId>com.seaweedfs</groupId>
|
||||||
<artifactId>seaweedfs-client</artifactId>
|
<artifactId>seaweedfs-client</artifactId>
|
||||||
<version>3.71</version>
|
<version>3.80</version>
|
||||||
|
|
||||||
<name>SeaweedFS Java Client</name>
|
<name>SeaweedFS Java Client</name>
|
||||||
<description>A java client for SeaweedFS.</description>
|
<description>A java client for SeaweedFS.</description>
|
||||||
@@ -31,9 +31,9 @@
|
|||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<protobuf.version>3.16.3</protobuf.version>
|
<protobuf.version>3.25.5</protobuf.version>
|
||||||
<!-- follow https://github.com/grpc/grpc-java -->
|
<!-- follow https://github.com/grpc/grpc-java -->
|
||||||
<grpc.version>1.53.0</grpc.version>
|
<grpc.version>1.68.1</grpc.version>
|
||||||
<guava.version>32.0.0-jre</guava.version>
|
<guava.version>32.0.0-jre</guava.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>com.seaweedfs</groupId>
|
<groupId>com.seaweedfs</groupId>
|
||||||
<artifactId>seaweedfs-client</artifactId>
|
<artifactId>seaweedfs-client</artifactId>
|
||||||
<version>3.71</version>
|
<version>3.80</version>
|
||||||
|
|
||||||
<name>SeaweedFS Java Client</name>
|
<name>SeaweedFS Java Client</name>
|
||||||
<description>A java client for SeaweedFS.</description>
|
<description>A java client for SeaweedFS.</description>
|
||||||
@@ -31,9 +31,9 @@
|
|||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<protobuf.version>3.16.3</protobuf.version>
|
<protobuf.version>3.25.5</protobuf.version>
|
||||||
<!-- follow https://github.com/grpc/grpc-java -->
|
<!-- follow https://github.com/grpc/grpc-java -->
|
||||||
<grpc.version>1.53.0</grpc.version>
|
<grpc.version>1.68.1</grpc.version>
|
||||||
<guava.version>32.0.0-jre</guava.version>
|
<guava.version>32.0.0-jre</guava.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>com.seaweedfs</groupId>
|
<groupId>com.seaweedfs</groupId>
|
||||||
<artifactId>seaweedfs-client</artifactId>
|
<artifactId>seaweedfs-client</artifactId>
|
||||||
<version>3.71</version>
|
<version>3.80</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.sonatype.oss</groupId>
|
<groupId>org.sonatype.oss</groupId>
|
||||||
@@ -14,9 +14,9 @@
|
|||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<protobuf.version>3.9.1</protobuf.version>
|
<protobuf.version>3.25.5</protobuf.version>
|
||||||
<!-- follow https://github.com/grpc/grpc-java -->
|
<!-- follow https://github.com/grpc/grpc-java -->
|
||||||
<grpc.version>1.23.0</grpc.version>
|
<grpc.version>1.68.1</grpc.version>
|
||||||
<guava.version>28.0-jre</guava.version>
|
<guava.version>28.0-jre</guava.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -14,20 +14,23 @@ public class ReadChunks {
|
|||||||
points.add(new Point(chunk.getOffset(), chunk, true));
|
points.add(new Point(chunk.getOffset(), chunk, true));
|
||||||
points.add(new Point(chunk.getOffset() + chunk.getSize(), chunk, false));
|
points.add(new Point(chunk.getOffset() + chunk.getSize(), chunk, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(points, new Comparator<Point>() {
|
Collections.sort(points, new Comparator<Point>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(Point a, Point b) {
|
public int compare(Point a, Point b) {
|
||||||
int x = (int) (a.x - b.x);
|
int xComparison = Long.compare(a.x, b.x);
|
||||||
if (a.x != b.x) {
|
if (xComparison != 0) {
|
||||||
return (int) (a.x - b.x);
|
return xComparison;
|
||||||
}
|
}
|
||||||
if (a.ts != b.ts) {
|
|
||||||
return (int) (a.ts - b.ts);
|
// If x values are equal, compare ts
|
||||||
|
int tsComparison = Long.compare(a.ts, b.ts);
|
||||||
|
if (tsComparison != 0) {
|
||||||
|
return tsComparison;
|
||||||
}
|
}
|
||||||
if (!a.isStart) {
|
|
||||||
return -1;
|
// If both x and ts are equal, prioritize start points
|
||||||
}
|
return Boolean.compare(b.isStart, a.isStart); // b.isStart first to prioritize starts
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ message Entry {
|
|||||||
|
|
||||||
RemoteEntry remote_entry = 10;
|
RemoteEntry remote_entry = 10;
|
||||||
int64 quota = 11; // for bucket only. Positive/Negative means enabled/disabled.
|
int64 quota = 11; // for bucket only. Positive/Negative means enabled/disabled.
|
||||||
|
int64 worm_enforced_at_ts_ns = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
message FullEntry {
|
message FullEntry {
|
||||||
@@ -442,6 +443,9 @@ message FilerConf {
|
|||||||
string data_node = 11;
|
string data_node = 11;
|
||||||
uint32 max_file_name_length = 12;
|
uint32 max_file_name_length = 12;
|
||||||
bool disable_chunk_deletion = 13;
|
bool disable_chunk_deletion = 13;
|
||||||
|
bool worm = 14;
|
||||||
|
uint64 worm_grace_period_seconds = 15;
|
||||||
|
uint64 worm_retention_time_seconds = 16;
|
||||||
}
|
}
|
||||||
repeated PathConf locations = 2;
|
repeated PathConf locations = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,13 +11,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.seaweedfs</groupId>
|
<groupId>com.seaweedfs</groupId>
|
||||||
<artifactId>seaweedfs-client</artifactId>
|
<artifactId>seaweedfs-client</artifactId>
|
||||||
<version>3.71</version>
|
<version>3.80</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.seaweedfs</groupId>
|
<groupId>com.seaweedfs</groupId>
|
||||||
<artifactId>seaweedfs-hadoop2-client</artifactId>
|
<artifactId>seaweedfs-hadoop2-client</artifactId>
|
||||||
<version>3.71</version>
|
<version>3.80</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -327,7 +327,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<properties>
|
<properties>
|
||||||
<seaweedfs.client.version>3.71</seaweedfs.client.version>
|
<seaweedfs.client.version>3.80</seaweedfs.client.version>
|
||||||
<hadoop.version>3.2.4</hadoop.version>
|
<hadoop.version>3.2.4</hadoop.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<seaweedfs.client.version>3.71</seaweedfs.client.version>
|
<seaweedfs.client.version>3.80</seaweedfs.client.version>
|
||||||
<hadoop.version>3.2.4</hadoop.version>
|
<hadoop.version>3.2.4</hadoop.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -327,7 +327,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<properties>
|
<properties>
|
||||||
<seaweedfs.client.version>3.71</seaweedfs.client.version>
|
<seaweedfs.client.version>3.80</seaweedfs.client.version>
|
||||||
<hadoop.version>3.2.4</hadoop.version>
|
<hadoop.version>3.2.4</hadoop.version>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<seaweedfs.client.version>3.71</seaweedfs.client.version>
|
<seaweedfs.client.version>3.80</seaweedfs.client.version>
|
||||||
<hadoop.version>3.2.4</hadoop.version>
|
<hadoop.version>3.2.4</hadoop.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.90, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le))",
|
"expr": "histogram_quantile(0.90, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"step": 60
|
"step": 60
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.90, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le, type))",
|
"expr": "histogram_quantile(0.90, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le, type))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.95, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le))",
|
"expr": "histogram_quantile(0.95, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -209,7 +209,7 @@
|
|||||||
"step": 60
|
"step": 60
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.95, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le, type))",
|
"expr": "histogram_quantile(0.95, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le, type))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -301,7 +301,7 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le))",
|
"expr": "histogram_quantile(0.99, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -310,7 +310,7 @@
|
|||||||
"step": 60
|
"step": 60
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, sum(rate(SeaweedFS_filer_request_seconds_bucket[1m])) by (le, type))",
|
"expr": "histogram_quantile(0.99, sum(rate(SeaweedFS_filerStore_request_seconds_bucket[1m])) by (le, type))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
@@ -415,7 +415,7 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(SeaweedFS_filer_request_total[1m])",
|
"expr": "rate(SeaweedFS_filerStore_request_total[1m])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 2,
|
"intervalFactor": 2,
|
||||||
"legendFormat": "{{type}}",
|
"legendFormat": "{{type}}",
|
||||||
@@ -804,6 +804,192 @@
|
|||||||
"alignLevel": null
|
"alignLevel": null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 9
|
||||||
|
},
|
||||||
|
"hiddenSeries": false,
|
||||||
|
"id": 84,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"options": {
|
||||||
|
"alertThreshold": true
|
||||||
|
},
|
||||||
|
"percentage": false,
|
||||||
|
"pluginVersion": "8.1.2",
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_received_bytes_total[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeRegions": [],
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Received",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 9
|
||||||
|
},
|
||||||
|
"hiddenSeries": false,
|
||||||
|
"id": 85,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"options": {
|
||||||
|
"alertThreshold": true
|
||||||
|
},
|
||||||
|
"percentage": false,
|
||||||
|
"pluginVersion": "8.1.2",
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_sent_bytes_total[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeRegions": [],
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Sent",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"aliasColors": {},
|
"aliasColors": {},
|
||||||
"bars": false,
|
"bars": false,
|
||||||
@@ -819,7 +1005,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 9
|
"y": 16
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 55,
|
"id": 55,
|
||||||
@@ -928,7 +1114,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 16
|
"y": 23
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"hideTimeOverride": false,
|
"hideTimeOverride": false,
|
||||||
@@ -1068,7 +1254,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 23
|
"y": 30
|
||||||
},
|
},
|
||||||
"id": 71,
|
"id": 71,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1091,7 +1277,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 24
|
"y": 31
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 47,
|
"id": 47,
|
||||||
@@ -1195,7 +1381,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 24
|
"y": 31
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 40,
|
"id": 40,
|
||||||
@@ -1294,7 +1480,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 31
|
"y": 38
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 48,
|
"id": 48,
|
||||||
@@ -1393,7 +1579,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 38
|
"y": 45
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 50,
|
"id": 50,
|
||||||
@@ -1492,7 +1678,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 45
|
"y": 52
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 51,
|
"id": 51,
|
||||||
@@ -1583,7 +1769,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 52
|
"y": 59
|
||||||
},
|
},
|
||||||
"id": 72,
|
"id": 72,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1606,7 +1792,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 53
|
"y": 60
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 12,
|
"id": 12,
|
||||||
@@ -1702,7 +1888,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 53
|
"y": 60
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 14,
|
"id": 14,
|
||||||
@@ -1797,7 +1983,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 60
|
"y": 67
|
||||||
},
|
},
|
||||||
"id": 73,
|
"id": 73,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1820,7 +2006,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 61
|
"y": 68
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 52,
|
"id": 52,
|
||||||
@@ -1941,7 +2127,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 61
|
"y": 68
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 54,
|
"id": 54,
|
||||||
@@ -2037,7 +2223,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 68
|
"y": 75
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 53,
|
"id": 53,
|
||||||
@@ -2136,7 +2322,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 75
|
"y": 82
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 66,
|
"id": 66,
|
||||||
@@ -2287,7 +2473,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 8,
|
"x": 8,
|
||||||
"y": 75
|
"y": 82
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 68,
|
"id": 68,
|
||||||
|
|||||||
@@ -713,6 +713,168 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS-DEV}",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"fill": 1,
|
||||||
|
"grid": {},
|
||||||
|
"id": 84,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_received_bytes_total[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Received",
|
||||||
|
"tooltip": {
|
||||||
|
"msResolution": true,
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "cumulative"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS-DEV}",
|
||||||
|
"editable": true,
|
||||||
|
"error": false,
|
||||||
|
"fill": 1,
|
||||||
|
"grid": {},
|
||||||
|
"id": 85,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null as zero",
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"span": 6,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_sent_bytes_total[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Sent",
|
||||||
|
"tooltip": {
|
||||||
|
"msResolution": true,
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "cumulative"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"aliasColors": {},
|
"aliasColors": {},
|
||||||
"bars": false,
|
"bars": false,
|
||||||
|
|||||||
@@ -261,6 +261,192 @@
|
|||||||
"alignLevel": null
|
"alignLevel": null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
|
"fill": 1,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"hiddenSeries": false,
|
||||||
|
"id": 84,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"options": {
|
||||||
|
"alertThreshold": true
|
||||||
|
},
|
||||||
|
"percentage": false,
|
||||||
|
"pluginVersion": "8.1.2",
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_received_bytes_total{namespace=\"$namespace\",service=~\"$service-api\"}[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeRegions": [],
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Received",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
|
"fill": 1,
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"unit": "decbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"hiddenSeries": false,
|
||||||
|
"id": 85,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"links": [],
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"options": {
|
||||||
|
"alertThreshold": true
|
||||||
|
},
|
||||||
|
"percentage": false,
|
||||||
|
"pluginVersion": "8.1.2",
|
||||||
|
"pointradius": 5,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "sum(rate(SeaweedFS_s3_bucket_traffic_sent_bytes_total{namespace=\"$namespace\",service=~\"$service-api\"}[$__interval])) by (bucket)",
|
||||||
|
"format": "time_series",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{bucket}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeRegions": [],
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "S3 Bucket Traffic Sent",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"format": "decbytes",
|
||||||
|
"logBase": 1,
|
||||||
|
"min": 0,
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"format": "short",
|
||||||
|
"logBase": 1,
|
||||||
|
"show": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"aliasColors": {},
|
"aliasColors": {},
|
||||||
"bars": false,
|
"bars": false,
|
||||||
@@ -282,7 +468,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 8
|
"y": 15
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 68,
|
"id": 68,
|
||||||
@@ -393,7 +579,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 8,
|
"x": 8,
|
||||||
"y": 8
|
"y": 15
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 67,
|
"id": 67,
|
||||||
@@ -504,7 +690,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 16,
|
"x": 16,
|
||||||
"y": 8
|
"y": 15
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 65,
|
"id": 65,
|
||||||
@@ -601,7 +787,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 15
|
"y": 22
|
||||||
},
|
},
|
||||||
"id": 55,
|
"id": 55,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -630,7 +816,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 16
|
"y": 23
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 46,
|
"id": 46,
|
||||||
@@ -741,7 +927,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 8,
|
"x": 8,
|
||||||
"y": 16
|
"y": 23
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 49,
|
"id": 49,
|
||||||
@@ -857,7 +1043,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 8,
|
"w": 8,
|
||||||
"x": 16,
|
"x": 16,
|
||||||
"y": 16
|
"y": 23
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 66,
|
"id": 66,
|
||||||
@@ -973,7 +1159,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 23
|
"y": 30
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 2,
|
"id": 2,
|
||||||
@@ -1072,7 +1258,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 30
|
"y": 37
|
||||||
},
|
},
|
||||||
"id": 56,
|
"id": 56,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1101,7 +1287,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 31
|
"y": 38
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 47,
|
"id": 47,
|
||||||
@@ -1209,7 +1395,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 31
|
"y": 38
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 40,
|
"id": 40,
|
||||||
@@ -1312,7 +1498,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 38
|
"y": 45
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 48,
|
"id": 48,
|
||||||
@@ -1425,7 +1611,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 45
|
"y": 52
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 50,
|
"id": 50,
|
||||||
@@ -1530,7 +1716,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 52
|
"y": 59
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 51,
|
"id": 51,
|
||||||
@@ -1615,7 +1801,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 59
|
"y": 66
|
||||||
},
|
},
|
||||||
"id": 57,
|
"id": 57,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1644,7 +1830,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 60
|
"y": 67
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 12,
|
"id": 12,
|
||||||
@@ -1744,7 +1930,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 60
|
"y": 67
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 14,
|
"id": 14,
|
||||||
@@ -1833,7 +2019,7 @@
|
|||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 67
|
"y": 74
|
||||||
},
|
},
|
||||||
"id": 58,
|
"id": 58,
|
||||||
"panels": [],
|
"panels": [],
|
||||||
@@ -1862,7 +2048,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 68
|
"y": 75
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 52,
|
"id": 52,
|
||||||
@@ -1990,7 +2176,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 68
|
"y": 75
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 54,
|
"id": 54,
|
||||||
@@ -2090,7 +2276,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 75
|
"y": 82
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 53,
|
"id": 53,
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
//go:build !windows && !openbsd && !netbsd && !plan9 && !solaris
|
||||||
|
// +build !windows,!openbsd,!netbsd,!plan9,!solaris
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
// go run unmaintained/disk/disk_status.go
|
||||||
|
|
||||||
|
type DiskStatus struct {
|
||||||
|
Dir string `protobuf:"bytes,1,opt,name=dir,proto3" json:"dir,omitempty"`
|
||||||
|
All uint64 `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"`
|
||||||
|
Used uint64 `protobuf:"varint,3,opt,name=used,proto3" json:"used,omitempty"`
|
||||||
|
Free uint64 `protobuf:"varint,4,opt,name=free,proto3" json:"free,omitempty"`
|
||||||
|
PercentFree float32 `protobuf:"fixed32,5,opt,name=percent_free,json=percentFree,proto3" json:"percent_free,omitempty"`
|
||||||
|
PercentUsed float32 `protobuf:"fixed32,6,opt,name=percent_used,json=percentUsed,proto3" json:"percent_used,omitempty"`
|
||||||
|
DiskType string `protobuf:"bytes,7,opt,name=disk_type,json=diskType,proto3" json:"disk_type,omitempty"`
|
||||||
|
|
||||||
|
// new fields about avail blocks
|
||||||
|
Avail uint64 `protobuf:"varint,4,opt,name=avail,proto3" json:"avail,omitempty"`
|
||||||
|
PercentAvail float32 `protobuf:"fixed32,5,opt,name=percent_avail,json=percentAvail,proto3" json:"percent_avail,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
dirs := []string{"/mnt/sdb", "/mnt/sdc", "/mnt/sdd", "/mnt/sde", "/mnt/sdf", "/mnt/sdg", "/mnt/sdh", "/mnt/sdi", "/mnt/sdj"}
|
||||||
|
// dirs := []string{"/mnt/sdb"}
|
||||||
|
for _, dir := range dirs {
|
||||||
|
disk := &DiskStatus{Dir: dir}
|
||||||
|
fillInDiskStatus(disk)
|
||||||
|
|
||||||
|
// bytes, _ := json.Marshal(disk)
|
||||||
|
// log.Printf("disk status %s", bytes)
|
||||||
|
log.Printf("disk: %s avail: %f free: %f", disk.Dir, disk.PercentAvail, disk.PercentFree)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fillInDiskStatus(disk *DiskStatus) {
|
||||||
|
fs := syscall.Statfs_t{}
|
||||||
|
err := syscall.Statfs(disk.Dir, &fs)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
disk.All = fs.Blocks * uint64(fs.Bsize)
|
||||||
|
disk.Free = fs.Bfree * uint64(fs.Bsize)
|
||||||
|
disk.Used = disk.All - disk.Free
|
||||||
|
disk.PercentFree = float32((float64(disk.Free) / float64(disk.All)) * 100)
|
||||||
|
disk.PercentUsed = float32((float64(disk.Used) / float64(disk.All)) * 100)
|
||||||
|
|
||||||
|
// avail blocks
|
||||||
|
disk.Avail = fs.Bavail * uint64(fs.Bsize)
|
||||||
|
disk.PercentAvail = float32((float64(disk.Avail) / float64(disk.All)) * 100)
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -21,8 +21,8 @@ import (
|
|||||||
"github.com/seaweedfs/seaweedfs/weed/operation"
|
"github.com/seaweedfs/seaweedfs/weed/operation"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/security"
|
"github.com/seaweedfs/seaweedfs/weed/security"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
|
||||||
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
|
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BenchmarkOptions struct {
|
type BenchmarkOptions struct {
|
||||||
@@ -242,7 +242,7 @@ func writeFiles(idChan chan int, fileIdLineChan chan string, s *stat) {
|
|||||||
DiskType: *b.diskType,
|
DiskType: *b.diskType,
|
||||||
}
|
}
|
||||||
if assignResult, err := operation.Assign(b.masterClient.GetMaster, b.grpcDialOption, ar); err == nil {
|
if assignResult, err := operation.Assign(b.masterClient.GetMaster, b.grpcDialOption, ar); err == nil {
|
||||||
fp.Server, fp.Fid, fp.Collection = assignResult.Url, assignResult.Fid, *b.collection
|
fp.Server, fp.Fid, fp.Pref.Collection = assignResult.Url, assignResult.Fid, *b.collection
|
||||||
if !isSecure && assignResult.Auth != "" {
|
if !isSecure && assignResult.Auth != "" {
|
||||||
isSecure = true
|
isSecure = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
package command
|
package command
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/replication/source"
|
"github.com/seaweedfs/seaweedfs/weed/replication/source"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/security"
|
"github.com/seaweedfs/seaweedfs/weed/security"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/util/http"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -14,16 +17,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type FilerBackupOptions struct {
|
type FilerBackupOptions struct {
|
||||||
isActivePassive *bool
|
isActivePassive *bool
|
||||||
filer *string
|
filer *string
|
||||||
path *string
|
path *string
|
||||||
excludePaths *string
|
excludePaths *string
|
||||||
excludeFileName *string
|
excludeFileName *string
|
||||||
debug *bool
|
debug *bool
|
||||||
proxyByFiler *bool
|
proxyByFiler *bool
|
||||||
doDeleteFiles *bool
|
doDeleteFiles *bool
|
||||||
timeAgo *time.Duration
|
disableErrorRetry *bool
|
||||||
retentionDays *int
|
ignore404Error *bool
|
||||||
|
timeAgo *time.Duration
|
||||||
|
retentionDays *int
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -41,6 +46,8 @@ func init() {
|
|||||||
filerBackupOptions.debug = cmdFilerBackup.Flag.Bool("debug", false, "debug mode to print out received files")
|
filerBackupOptions.debug = cmdFilerBackup.Flag.Bool("debug", false, "debug mode to print out received files")
|
||||||
filerBackupOptions.timeAgo = cmdFilerBackup.Flag.Duration("timeAgo", 0, "start time before now. \"300ms\", \"1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\"")
|
filerBackupOptions.timeAgo = cmdFilerBackup.Flag.Duration("timeAgo", 0, "start time before now. \"300ms\", \"1.5h\" or \"2h45m\". Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\"")
|
||||||
filerBackupOptions.retentionDays = cmdFilerBackup.Flag.Int("retentionDays", 0, "incremental backup retention days")
|
filerBackupOptions.retentionDays = cmdFilerBackup.Flag.Int("retentionDays", 0, "incremental backup retention days")
|
||||||
|
filerBackupOptions.disableErrorRetry = cmdFilerBackup.Flag.Bool("disableErrorRetry", false, "disables errors retry, only logs will print")
|
||||||
|
filerBackupOptions.ignore404Error = cmdFilerBackup.Flag.Bool("ignore404Error", true, "ignore 404 errors from filer")
|
||||||
}
|
}
|
||||||
|
|
||||||
var cmdFilerBackup = &Command{
|
var cmdFilerBackup = &Command{
|
||||||
@@ -130,7 +137,23 @@ func doFilerBackup(grpcDialOption grpc.DialOption, backupOption *FilerBackupOpti
|
|||||||
*backupOption.proxyByFiler)
|
*backupOption.proxyByFiler)
|
||||||
dataSink.SetSourceFiler(filerSource)
|
dataSink.SetSourceFiler(filerSource)
|
||||||
|
|
||||||
processEventFn := genProcessFunction(sourcePath, targetPath, excludePaths, reExcludeFileName, dataSink, *backupOption.doDeleteFiles, debug)
|
var processEventFn func(*filer_pb.SubscribeMetadataResponse) error
|
||||||
|
if *backupOption.ignore404Error {
|
||||||
|
processEventFnGenerated := genProcessFunction(sourcePath, targetPath, excludePaths, reExcludeFileName, dataSink, *backupOption.doDeleteFiles, debug)
|
||||||
|
processEventFn = func(resp *filer_pb.SubscribeMetadataResponse) error {
|
||||||
|
err := processEventFnGenerated(resp)
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if errors.Is(err, http.ErrNotFound) {
|
||||||
|
glog.V(0).Infof("got 404 error, ignore it: %s", err.Error())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
processEventFn = genProcessFunction(sourcePath, targetPath, excludePaths, reExcludeFileName, dataSink, *backupOption.doDeleteFiles, debug)
|
||||||
|
}
|
||||||
|
|
||||||
processEventFnWithOffset := pb.AddOffsetFunc(processEventFn, 3*time.Second, func(counter int64, lastTsNs int64) error {
|
processEventFnWithOffset := pb.AddOffsetFunc(processEventFn, 3*time.Second, func(counter int64, lastTsNs int64) error {
|
||||||
glog.V(0).Infof("backup %s progressed to %v %0.2f/sec", sourceFiler, time.Unix(0, lastTsNs), float64(counter)/float64(3))
|
glog.V(0).Infof("backup %s progressed to %v %0.2f/sec", sourceFiler, time.Unix(0, lastTsNs), float64(counter)/float64(3))
|
||||||
@@ -154,6 +177,11 @@ func doFilerBackup(grpcDialOption grpc.DialOption, backupOption *FilerBackupOpti
|
|||||||
prefix = prefix + "/"
|
prefix = prefix + "/"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eventErrorType := pb.RetryForeverOnError
|
||||||
|
if *backupOption.disableErrorRetry {
|
||||||
|
eventErrorType = pb.TrivialOnError
|
||||||
|
}
|
||||||
|
|
||||||
metadataFollowOption := &pb.MetadataFollowOption{
|
metadataFollowOption := &pb.MetadataFollowOption{
|
||||||
ClientName: "backup_" + dataSink.GetName(),
|
ClientName: "backup_" + dataSink.GetName(),
|
||||||
ClientId: clientId,
|
ClientId: clientId,
|
||||||
@@ -164,7 +192,7 @@ func doFilerBackup(grpcDialOption grpc.DialOption, backupOption *FilerBackupOpti
|
|||||||
DirectoriesToWatch: nil,
|
DirectoriesToWatch: nil,
|
||||||
StartTsNs: startFrom.UnixNano(),
|
StartTsNs: startFrom.UnixNano(),
|
||||||
StopTsNs: 0,
|
StopTsNs: 0,
|
||||||
EventErrorType: pb.RetryForeverOnError,
|
EventErrorType: eventErrorType,
|
||||||
}
|
}
|
||||||
|
|
||||||
return pb.FollowMetadata(sourceFiler, grpcDialOption, metadataFollowOption, processEventFnWithOffset)
|
return pb.FollowMetadata(sourceFiler, grpcDialOption, metadataFollowOption, processEventFnWithOffset)
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import (
|
|||||||
"github.com/seaweedfs/seaweedfs/weed/storage/needle"
|
"github.com/seaweedfs/seaweedfs/weed/storage/needle"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -37,7 +36,6 @@ type CopyOptions struct {
|
|||||||
ttl *string
|
ttl *string
|
||||||
diskType *string
|
diskType *string
|
||||||
maxMB *int
|
maxMB *int
|
||||||
masterClient *wdclient.MasterClient
|
|
||||||
concurrentFiles *int
|
concurrentFiles *int
|
||||||
concurrentChunks *int
|
concurrentChunks *int
|
||||||
grpcDialOption grpc.DialOption
|
grpcDialOption grpc.DialOption
|
||||||
|
|||||||
+17
-12
@@ -4,6 +4,12 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
@@ -16,11 +22,6 @@ import (
|
|||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"os"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
"sync/atomic"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type SyncOptions struct {
|
type SyncOptions struct {
|
||||||
@@ -403,11 +404,11 @@ func genProcessFunction(sourcePath string, targetPath string, excludePaths []str
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !strings.HasPrefix(resp.Directory, sourcePath) {
|
if !strings.HasPrefix(resp.Directory+"/", sourcePath) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, excludePath := range excludePaths {
|
for _, excludePath := range excludePaths {
|
||||||
if strings.HasPrefix(resp.Directory, excludePath) {
|
if strings.HasPrefix(resp.Directory+"/", excludePath) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -436,7 +437,7 @@ func genProcessFunction(sourcePath string, targetPath string, excludePaths []str
|
|||||||
}
|
}
|
||||||
key := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
key := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
||||||
if err := dataSink.CreateEntry(key, message.NewEntry, message.Signatures); err != nil {
|
if err := dataSink.CreateEntry(key, message.NewEntry, message.Signatures); err != nil {
|
||||||
return fmt.Errorf("create entry1 : %v", err)
|
return fmt.Errorf("create entry1 : %w", err)
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -454,7 +455,11 @@ func genProcessFunction(sourcePath string, targetPath string, excludePaths []str
|
|||||||
// new key is also in the watched directory
|
// new key is also in the watched directory
|
||||||
if doDeleteFiles {
|
if doDeleteFiles {
|
||||||
oldKey := util.Join(targetPath, string(sourceOldKey)[len(sourcePath):])
|
oldKey := util.Join(targetPath, string(sourceOldKey)[len(sourcePath):])
|
||||||
message.NewParentPath = util.Join(targetPath, message.NewParentPath[len(sourcePath):])
|
if strings.HasSuffix(sourcePath, "/") {
|
||||||
|
message.NewParentPath = util.Join(targetPath, message.NewParentPath[len(sourcePath)-1:])
|
||||||
|
} else {
|
||||||
|
message.NewParentPath = util.Join(targetPath, message.NewParentPath[len(sourcePath):])
|
||||||
|
}
|
||||||
foundExisting, err := dataSink.UpdateEntry(string(oldKey), message.OldEntry, message.NewParentPath, message.NewEntry, message.DeleteChunks, message.Signatures)
|
foundExisting, err := dataSink.UpdateEntry(string(oldKey), message.OldEntry, message.NewParentPath, message.NewEntry, message.DeleteChunks, message.Signatures)
|
||||||
if foundExisting {
|
if foundExisting {
|
||||||
return err
|
return err
|
||||||
@@ -462,13 +467,13 @@ func genProcessFunction(sourcePath string, targetPath string, excludePaths []str
|
|||||||
|
|
||||||
// not able to find old entry
|
// not able to find old entry
|
||||||
if err = dataSink.DeleteEntry(string(oldKey), message.OldEntry.IsDirectory, false, message.Signatures); err != nil {
|
if err = dataSink.DeleteEntry(string(oldKey), message.OldEntry.IsDirectory, false, message.Signatures); err != nil {
|
||||||
return fmt.Errorf("delete old entry %v: %v", oldKey, err)
|
return fmt.Errorf("delete old entry %v: %w", oldKey, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// create the new entry
|
// create the new entry
|
||||||
newKey := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
newKey := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
||||||
if err := dataSink.CreateEntry(newKey, message.NewEntry, message.Signatures); err != nil {
|
if err := dataSink.CreateEntry(newKey, message.NewEntry, message.Signatures); err != nil {
|
||||||
return fmt.Errorf("create entry2 : %v", err)
|
return fmt.Errorf("create entry2 : %w", err)
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -486,7 +491,7 @@ func genProcessFunction(sourcePath string, targetPath string, excludePaths []str
|
|||||||
// new key is in the watched directory
|
// new key is in the watched directory
|
||||||
key := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
key := buildKey(dataSink, message, targetPath, sourceNewKey, sourcePath)
|
||||||
if err := dataSink.CreateEntry(key, message.NewEntry, message.Signatures); err != nil {
|
if err := dataSink.CreateEntry(key, message.NewEntry, message.Signatures); err != nil {
|
||||||
return fmt.Errorf("create entry3 : %v", err)
|
return fmt.Errorf("create entry3 : %w", err)
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/iamapi"
|
"github.com/seaweedfs/seaweedfs/weed/iamapi"
|
||||||
@@ -12,7 +14,6 @@ import (
|
|||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/security"
|
"github.com/seaweedfs/seaweedfs/weed/security"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -35,7 +36,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var cmdIam = &Command{
|
var cmdIam = &Command{
|
||||||
UsageLine: "iam [-port=8111] [-filer=<ip:port>] [-masters=<ip:port>,<ip:port>]",
|
UsageLine: "iam [-port=8111] [-filer=<ip:port>] [-master=<ip:port>,<ip:port>]",
|
||||||
Short: "start a iam API compatible server",
|
Short: "start a iam API compatible server",
|
||||||
Long: "start a iam API compatible server.",
|
Long: "start a iam API compatible server.",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
hashicorpRaft "github.com/hashicorp/raft"
|
hashicorpRaft "github.com/hashicorp/raft"
|
||||||
|
|
||||||
"golang.org/x/exp/slices"
|
"slices"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/seaweedfs/raft/protobuf"
|
"github.com/seaweedfs/raft/protobuf"
|
||||||
@@ -134,8 +134,8 @@ func runMaster(cmd *Command, args []string) bool {
|
|||||||
*m.metricsHttpIp = *m.ip
|
*m.metricsHttpIp = *m.ip
|
||||||
}
|
}
|
||||||
go stats_collect.StartMetricsServer(*m.metricsHttpIp, *m.metricsHttpPort)
|
go stats_collect.StartMetricsServer(*m.metricsHttpIp, *m.metricsHttpPort)
|
||||||
|
go stats_collect.LoopPushingMetric("masterServer", util.JoinHostPort(*m.ip, *m.port), *m.metricsAddress, *m.metricsIntervalSec)
|
||||||
startMaster(m, masterWhiteList)
|
startMaster(m, masterWhiteList)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ms.SetRaftServer(raftServer)
|
ms.SetRaftServer(raftServer)
|
||||||
r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods(http.MethodGet)
|
r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods(http.MethodGet, http.MethodHead)
|
||||||
r.HandleFunc("/cluster/healthz", raftServer.HealthzHandler).Methods(http.MethodGet, http.MethodHead)
|
r.HandleFunc("/cluster/healthz", raftServer.HealthzHandler).Methods(http.MethodGet, http.MethodHead)
|
||||||
if *masterOption.raftHashicorp {
|
if *masterOption.raftHashicorp {
|
||||||
r.HandleFunc("/raft/stats", raftServer.StatsRaftHandler).Methods(http.MethodGet)
|
r.HandleFunc("/raft/stats", raftServer.StatsRaftHandler).Methods(http.MethodGet)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ type MountOptions struct {
|
|||||||
ttlSec *int
|
ttlSec *int
|
||||||
chunkSizeLimitMB *int
|
chunkSizeLimitMB *int
|
||||||
concurrentWriters *int
|
concurrentWriters *int
|
||||||
|
cacheMetaTtlSec *int
|
||||||
cacheDirForRead *string
|
cacheDirForRead *string
|
||||||
cacheDirForWrite *string
|
cacheDirForWrite *string
|
||||||
cacheSizeMBForRead *int64
|
cacheSizeMBForRead *int64
|
||||||
@@ -33,7 +34,6 @@ type MountOptions struct {
|
|||||||
localSocket *string
|
localSocket *string
|
||||||
disableXAttr *bool
|
disableXAttr *bool
|
||||||
extraOptions []string
|
extraOptions []string
|
||||||
writeOnceReadMany *bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -59,6 +59,7 @@ func init() {
|
|||||||
mountOptions.cacheDirForRead = cmdMount.Flag.String("cacheDir", os.TempDir(), "local cache directory for file chunks and meta data")
|
mountOptions.cacheDirForRead = cmdMount.Flag.String("cacheDir", os.TempDir(), "local cache directory for file chunks and meta data")
|
||||||
mountOptions.cacheSizeMBForRead = cmdMount.Flag.Int64("cacheCapacityMB", 128, "file chunk read cache capacity in MB")
|
mountOptions.cacheSizeMBForRead = cmdMount.Flag.Int64("cacheCapacityMB", 128, "file chunk read cache capacity in MB")
|
||||||
mountOptions.cacheDirForWrite = cmdMount.Flag.String("cacheDirWrite", "", "buffer writes mostly for large files")
|
mountOptions.cacheDirForWrite = cmdMount.Flag.String("cacheDirWrite", "", "buffer writes mostly for large files")
|
||||||
|
mountOptions.cacheMetaTtlSec = cmdMount.Flag.Int("cacheMetaTtlSec", 60, "metadata cache validity seconds")
|
||||||
mountOptions.dataCenter = cmdMount.Flag.String("dataCenter", "", "prefer to write to the data center")
|
mountOptions.dataCenter = cmdMount.Flag.String("dataCenter", "", "prefer to write to the data center")
|
||||||
mountOptions.allowOthers = cmdMount.Flag.Bool("allowOthers", true, "allows other users to access the file system")
|
mountOptions.allowOthers = cmdMount.Flag.Bool("allowOthers", true, "allows other users to access the file system")
|
||||||
mountOptions.umaskString = cmdMount.Flag.String("umask", "022", "octal umask, e.g., 022, 0111")
|
mountOptions.umaskString = cmdMount.Flag.String("umask", "022", "octal umask, e.g., 022, 0111")
|
||||||
@@ -71,7 +72,6 @@ func init() {
|
|||||||
mountOptions.debugPort = cmdMount.Flag.Int("debug.port", 6061, "http port for debugging")
|
mountOptions.debugPort = cmdMount.Flag.Int("debug.port", 6061, "http port for debugging")
|
||||||
mountOptions.localSocket = cmdMount.Flag.String("localSocket", "", "default to /tmp/seaweedfs-mount-<mount_dir_hash>.sock")
|
mountOptions.localSocket = cmdMount.Flag.String("localSocket", "", "default to /tmp/seaweedfs-mount-<mount_dir_hash>.sock")
|
||||||
mountOptions.disableXAttr = cmdMount.Flag.Bool("disableXAttr", false, "disable xattr")
|
mountOptions.disableXAttr = cmdMount.Flag.Bool("disableXAttr", false, "disable xattr")
|
||||||
mountOptions.writeOnceReadMany = cmdMount.Flag.Bool("writeOnceReadMany", false, "write once, read many times")
|
|
||||||
|
|
||||||
mountCpuProfile = cmdMount.Flag.String("cpuprofile", "", "cpu profile output file")
|
mountCpuProfile = cmdMount.Flag.String("cpuprofile", "", "cpu profile output file")
|
||||||
mountMemProfile = cmdMount.Flag.String("memprofile", "", "memory profile output file")
|
mountMemProfile = cmdMount.Flag.String("memprofile", "", "memory profile output file")
|
||||||
|
|||||||
+17
-11
@@ -6,6 +6,15 @@ package command
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/user"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hanwen/go-fuse/v2/fuse"
|
"github.com/hanwen/go-fuse/v2/fuse"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/mount"
|
"github.com/seaweedfs/seaweedfs/weed/mount"
|
||||||
@@ -17,14 +26,6 @@ import (
|
|||||||
"github.com/seaweedfs/seaweedfs/weed/security"
|
"github.com/seaweedfs/seaweedfs/weed/security"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/storage/types"
|
"github.com/seaweedfs/seaweedfs/weed/storage/types"
|
||||||
"google.golang.org/grpc/reflection"
|
"google.golang.org/grpc/reflection"
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"os/user"
|
|
||||||
"runtime"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
"github.com/seaweedfs/seaweedfs/weed/util/grace"
|
||||||
@@ -60,7 +61,7 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
|
|||||||
// basic checks
|
// basic checks
|
||||||
chunkSizeLimitMB := *mountOptions.chunkSizeLimitMB
|
chunkSizeLimitMB := *mountOptions.chunkSizeLimitMB
|
||||||
if chunkSizeLimitMB <= 0 {
|
if chunkSizeLimitMB <= 0 {
|
||||||
fmt.Printf("Please specify a reasonable buffer size.")
|
fmt.Printf("Please specify a reasonable buffer size.\n")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,6 +236,7 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
|
|||||||
CacheDirForRead: *option.cacheDirForRead,
|
CacheDirForRead: *option.cacheDirForRead,
|
||||||
CacheSizeMBForRead: *option.cacheSizeMBForRead,
|
CacheSizeMBForRead: *option.cacheSizeMBForRead,
|
||||||
CacheDirForWrite: cacheDirForWrite,
|
CacheDirForWrite: cacheDirForWrite,
|
||||||
|
CacheMetaTTlSec: *option.cacheMetaTtlSec,
|
||||||
DataCenter: *option.dataCenter,
|
DataCenter: *option.dataCenter,
|
||||||
Quota: int64(*option.collectionQuota) * 1024 * 1024,
|
Quota: int64(*option.collectionQuota) * 1024 * 1024,
|
||||||
MountUid: uid,
|
MountUid: uid,
|
||||||
@@ -247,7 +249,7 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
|
|||||||
Cipher: cipher,
|
Cipher: cipher,
|
||||||
UidGidMapper: uidGidMapper,
|
UidGidMapper: uidGidMapper,
|
||||||
DisableXAttr: *option.disableXAttr,
|
DisableXAttr: *option.disableXAttr,
|
||||||
WriteOnceReadMany: *option.writeOnceReadMany,
|
IsMacOs: runtime.GOOS == "darwin",
|
||||||
})
|
})
|
||||||
|
|
||||||
// create mount root
|
// create mount root
|
||||||
@@ -271,7 +273,11 @@ func RunMount(option *MountOptions, umask os.FileMode) bool {
|
|||||||
reflection.Register(grpcS)
|
reflection.Register(grpcS)
|
||||||
go grpcS.Serve(montSocketListener)
|
go grpcS.Serve(montSocketListener)
|
||||||
|
|
||||||
seaweedFileSystem.StartBackgroundTasks()
|
err = seaweedFileSystem.StartBackgroundTasks()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("failed to start background tasks: %v\n", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("mounted %s%s to %v", *option.filer, mountRoot, dir)
|
glog.V(0).Infof("mounted %s%s to %v", *option.filer, mountRoot, dir)
|
||||||
glog.V(0).Infof("This is SeaweedFS version %s %s %s", util.Version(), runtime.GOOS, runtime.GOARCH)
|
glog.V(0).Infof("This is SeaweedFS version %s %s %s", util.Version(), runtime.GOOS, runtime.GOARCH)
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package command
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/mq/agent"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_agent_pb"
|
||||||
|
"google.golang.org/grpc/reflection"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/security"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
mqAgentOptions MessageQueueAgentOptions
|
||||||
|
)
|
||||||
|
|
||||||
|
type MessageQueueAgentOptions struct {
|
||||||
|
brokers []pb.ServerAddress
|
||||||
|
brokersString *string
|
||||||
|
filerGroup *string
|
||||||
|
ip *string
|
||||||
|
port *int
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cmdMqAgent.Run = runMqAgent // break init cycle
|
||||||
|
mqAgentOptions.brokersString = cmdMqAgent.Flag.String("broker", "localhost:17777", "comma-separated message queue brokers")
|
||||||
|
mqAgentOptions.ip = cmdMqAgent.Flag.String("ip", "localhost", "message queue agent host address")
|
||||||
|
mqAgentOptions.port = cmdMqAgent.Flag.Int("port", 16777, "message queue agent gRPC server port")
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmdMqAgent = &Command{
|
||||||
|
UsageLine: "mq.agent [-port=6377] [-master=<ip:port>]",
|
||||||
|
Short: "<WIP> start a message queue agent",
|
||||||
|
Long: `start a message queue agent
|
||||||
|
|
||||||
|
The agent runs on local server to accept gRPC calls to write or read messages.
|
||||||
|
The messages are sent to message queue brokers.
|
||||||
|
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
|
||||||
|
func runMqAgent(cmd *Command, args []string) bool {
|
||||||
|
|
||||||
|
util.LoadSecurityConfiguration()
|
||||||
|
|
||||||
|
mqAgentOptions.brokers = pb.ServerAddresses(*mqAgentOptions.brokersString).ToAddresses()
|
||||||
|
|
||||||
|
return mqAgentOptions.startQueueAgent()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mqAgentOpt *MessageQueueAgentOptions) startQueueAgent() bool {
|
||||||
|
|
||||||
|
grpcDialOption := security.LoadClientTLS(util.GetViper(), "grpc.msg_agent")
|
||||||
|
|
||||||
|
agentServer := agent.NewMessageQueueAgent(&agent.MessageQueueAgentOptions{
|
||||||
|
SeedBrokers: mqAgentOpt.brokers,
|
||||||
|
}, grpcDialOption)
|
||||||
|
|
||||||
|
// start grpc listener
|
||||||
|
grpcL, _, err := util.NewIpAndLocalListeners(*mqAgentOpt.ip, *mqAgentOpt.port, 0)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("failed to listen on grpc port %d: %v", *mqAgentOpt.port, err)
|
||||||
|
}
|
||||||
|
grpcS := pb.NewGrpcServer()
|
||||||
|
mq_agent_pb.RegisterSeaweedMessagingAgentServer(grpcS, agentServer)
|
||||||
|
reflection.Register(grpcS)
|
||||||
|
grpcS.Serve(grpcL)
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
||||||
+2
-2
@@ -312,7 +312,7 @@ func (s3opt *S3Options) startS3Server() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
caCertPool := x509.NewCertPool()
|
caCertPool := x509.NewCertPool()
|
||||||
if *s3Options.tlsCACertificate != "" {
|
if *s3opt.tlsCACertificate != "" {
|
||||||
// load CA certificate file and add it to list of client CAs
|
// load CA certificate file and add it to list of client CAs
|
||||||
caCertFile, err := ioutil.ReadFile(*s3opt.tlsCACertificate)
|
caCertFile, err := ioutil.ReadFile(*s3opt.tlsCACertificate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -322,7 +322,7 @@ func (s3opt *S3Options) startS3Server() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clientAuth := tls.NoClientCert
|
clientAuth := tls.NoClientCert
|
||||||
if *s3Options.tlsVerifyClientCert {
|
if *s3opt.tlsVerifyClientCert {
|
||||||
clientAuth = tls.RequireAndVerifyClientCert
|
clientAuth = tls.RequireAndVerifyClientCert
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ copy_1 = 7 # create 1 x 7 = 7 actual volumes
|
|||||||
copy_2 = 6 # create 2 x 6 = 12 actual volumes
|
copy_2 = 6 # create 2 x 6 = 12 actual volumes
|
||||||
copy_3 = 3 # create 3 x 3 = 9 actual volumes
|
copy_3 = 3 # create 3 x 3 = 9 actual volumes
|
||||||
copy_other = 1 # create n x 1 = n actual volumes
|
copy_other = 1 # create n x 1 = n actual volumes
|
||||||
|
threshold = 0.9 # create threshold
|
||||||
|
|
||||||
# configuration flags for replication
|
# configuration flags for replication
|
||||||
[master.replication]
|
[master.replication]
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ cert = ""
|
|||||||
key = ""
|
key = ""
|
||||||
allowed_commonNames = "" # comma-separated SSL certificate common names
|
allowed_commonNames = "" # comma-separated SSL certificate common names
|
||||||
|
|
||||||
|
[grpc.msg_agent]
|
||||||
|
cert = ""
|
||||||
|
key = ""
|
||||||
|
allowed_commonNames = "" # comma-separated SSL certificate common names
|
||||||
|
|
||||||
# use this for any place needs a grpc client
|
# use this for any place needs a grpc client
|
||||||
# i.e., "weed backup|benchmark|filer.copy|filer.replicate|mount|s3|upload"
|
# i.e., "weed backup|benchmark|filer.copy|filer.replicate|mount|s3|upload"
|
||||||
[grpc.client]
|
[grpc.client]
|
||||||
@@ -98,7 +103,7 @@ key = ""
|
|||||||
# https client for master|volume|filer|etc connection
|
# https client for master|volume|filer|etc connection
|
||||||
# It is necessary that the parameters [https.volume]|[https.master]|[https.filer] are set
|
# It is necessary that the parameters [https.volume]|[https.master]|[https.filer] are set
|
||||||
[https.client]
|
[https.client]
|
||||||
enabled = true
|
enabled = false
|
||||||
cert = ""
|
cert = ""
|
||||||
key = ""
|
key = ""
|
||||||
ca = ""
|
ca = ""
|
||||||
@@ -121,3 +126,7 @@ cert = ""
|
|||||||
key = ""
|
key = ""
|
||||||
ca = ""
|
ca = ""
|
||||||
# disable_tls_verify_client_cert = true|false (default: false)
|
# disable_tls_verify_client_cert = true|false (default: false)
|
||||||
|
|
||||||
|
# white list. It's checking request ip address.
|
||||||
|
[guard]
|
||||||
|
white_list = ""
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//go:build elastic && ydb && gocdk && tikv
|
//go:build elastic && gocdk && rclone && sqlite && tikv && ydb
|
||||||
// +build elastic,ydb,gocdk,tikv
|
// +build elastic,gocdk,rclone,sqlite,tikv,ydb
|
||||||
|
|
||||||
package command
|
package command
|
||||||
|
|
||||||
|
|||||||
+16
-2
@@ -97,7 +97,14 @@ func runUpload(cmd *Command, args []string) bool {
|
|||||||
if e != nil {
|
if e != nil {
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
results, e := operation.SubmitFiles(func(_ context.Context) pb.ServerAddress { return pb.ServerAddress(*upload.master) }, grpcDialOption, parts, *upload.replication, *upload.collection, *upload.dataCenter, *upload.ttl, *upload.diskType, *upload.maxMB, *upload.usePublicUrl)
|
results, e := operation.SubmitFiles(func(_ context.Context) pb.ServerAddress { return pb.ServerAddress(*upload.master) }, grpcDialOption, parts, operation.StoragePreference{
|
||||||
|
Replication: *upload.replication,
|
||||||
|
Collection: *upload.collection,
|
||||||
|
DataCenter: *upload.dataCenter,
|
||||||
|
Ttl: *upload.ttl,
|
||||||
|
DiskType: *upload.diskType,
|
||||||
|
MaxMB: *upload.maxMB,
|
||||||
|
}, *upload.usePublicUrl)
|
||||||
bytes, _ := json.Marshal(results)
|
bytes, _ := json.Marshal(results)
|
||||||
fmt.Println(string(bytes))
|
fmt.Println(string(bytes))
|
||||||
if e != nil {
|
if e != nil {
|
||||||
@@ -119,7 +126,14 @@ func runUpload(cmd *Command, args []string) bool {
|
|||||||
fmt.Println(e.Error())
|
fmt.Println(e.Error())
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
results, err := operation.SubmitFiles(func(_ context.Context) pb.ServerAddress { return pb.ServerAddress(*upload.master) }, grpcDialOption, parts, *upload.replication, *upload.collection, *upload.dataCenter, *upload.ttl, *upload.diskType, *upload.maxMB, *upload.usePublicUrl)
|
results, err := operation.SubmitFiles(func(_ context.Context) pb.ServerAddress { return pb.ServerAddress(*upload.master) }, grpcDialOption, parts, operation.StoragePreference{
|
||||||
|
Replication: *upload.replication,
|
||||||
|
Collection: *upload.collection,
|
||||||
|
DataCenter: *upload.dataCenter,
|
||||||
|
Ttl: *upload.ttl,
|
||||||
|
DiskType: *upload.diskType,
|
||||||
|
MaxMB: *upload.maxMB,
|
||||||
|
}, *upload.usePublicUrl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err.Error())
|
fmt.Println(err.Error())
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -280,6 +280,7 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
|
|||||||
clusterHttpServer := v.startClusterHttpService(volumeMux)
|
clusterHttpServer := v.startClusterHttpService(volumeMux)
|
||||||
|
|
||||||
grace.OnReload(volumeServer.LoadNewVolumes)
|
grace.OnReload(volumeServer.LoadNewVolumes)
|
||||||
|
grace.OnReload(volumeServer.Reload)
|
||||||
|
|
||||||
stopChan := make(chan bool)
|
stopChan := make(chan bool)
|
||||||
grace.OnInterrupt(func() {
|
grace.OnInterrupt(func() {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package cassandra
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/gocql/gocql"
|
"github.com/gocql/gocql"
|
||||||
"time"
|
"time"
|
||||||
@@ -129,13 +130,10 @@ func (store *CassandraStore) FindEntry(ctx context.Context, fullpath util.FullPa
|
|||||||
if err := store.session.Query(
|
if err := store.session.Query(
|
||||||
"SELECT meta FROM filemeta WHERE directory=? AND name=?",
|
"SELECT meta FROM filemeta WHERE directory=? AND name=?",
|
||||||
dir, name).Scan(&data); err != nil {
|
dir, name).Scan(&data); err != nil {
|
||||||
if err != gocql.ErrNotFound {
|
if errors.Is(err, gocql.ErrNotFound) {
|
||||||
return nil, filer_pb.ErrNotFound
|
return nil, filer_pb.ErrNotFound
|
||||||
}
|
}
|
||||||
}
|
return nil, err
|
||||||
|
|
||||||
if len(data) == 0 {
|
|
||||||
return nil, filer_pb.ErrNotFound
|
|
||||||
}
|
}
|
||||||
|
|
||||||
entry = &filer.Entry{
|
entry = &filer.Entry{
|
||||||
|
|||||||
@@ -78,12 +78,12 @@ func (store *ElasticStore) initialize(options []elastic.ClientOptionFunc) (err e
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
store.client, err = elastic.NewClient(options...)
|
store.client, err = elastic.NewClient(options...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("init elastic %v.", err)
|
return fmt.Errorf("init elastic %v", err)
|
||||||
}
|
}
|
||||||
if ok, err := store.client.IndexExists(indexKV).Do(ctx); err == nil && !ok {
|
if ok, err := store.client.IndexExists(indexKV).Do(ctx); err == nil && !ok {
|
||||||
_, err = store.client.CreateIndex(indexKV).Body(kvMappings).Do(ctx)
|
_, err = store.client.CreateIndex(indexKV).Body(kvMappings).Do(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("create index(%s) %v.", indexKV, err)
|
return fmt.Errorf("create index(%s) %v", indexKV, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@@ -114,7 +114,7 @@ func (store *ElasticStore) InsertEntry(ctx context.Context, entry *filer.Entry)
|
|||||||
value, err := jsoniter.Marshal(esEntry)
|
value, err := jsoniter.Marshal(esEntry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("insert entry(%s) %v.", string(entry.FullPath), err)
|
glog.Errorf("insert entry(%s) %v.", string(entry.FullPath), err)
|
||||||
return fmt.Errorf("insert entry %v.", err)
|
return fmt.Errorf("insert entry marshal %v", err)
|
||||||
}
|
}
|
||||||
_, err = store.client.Index().
|
_, err = store.client.Index().
|
||||||
Index(index).
|
Index(index).
|
||||||
@@ -124,7 +124,7 @@ func (store *ElasticStore) InsertEntry(ctx context.Context, entry *filer.Entry)
|
|||||||
Do(ctx)
|
Do(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("insert entry(%s) %v.", string(entry.FullPath), err)
|
glog.Errorf("insert entry(%s) %v.", string(entry.FullPath), err)
|
||||||
return fmt.Errorf("insert entry %v.", err)
|
return fmt.Errorf("insert entry %v", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -194,7 +194,7 @@ func (store *ElasticStore) deleteEntry(ctx context.Context, index, id string) (e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
glog.Errorf("delete entry(index:%s,_id:%s) %v.", index, id, err)
|
glog.Errorf("delete entry(index:%s,_id:%s) %v.", index, id, err)
|
||||||
return fmt.Errorf("delete entry %v.", err)
|
return fmt.Errorf("delete entry %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *ElasticStore) DeleteFolderChildren(ctx context.Context, fullpath weed_util.FullPath) (err error) {
|
func (store *ElasticStore) DeleteFolderChildren(ctx context.Context, fullpath weed_util.FullPath) (err error) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func (store *ElasticStore) KvDelete(ctx context.Context, key []byte) (err error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
glog.Errorf("delete key(id:%s) %v.", string(key), err)
|
glog.Errorf("delete key(id:%s) %v.", string(key), err)
|
||||||
return fmt.Errorf("delete key %v.", err)
|
return fmt.Errorf("delete key %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *ElasticStore) KvGet(ctx context.Context, key []byte) (value []byte, err error) {
|
func (store *ElasticStore) KvGet(ctx context.Context, key []byte) (value []byte, err error) {
|
||||||
@@ -53,7 +53,7 @@ func (store *ElasticStore) KvPut(ctx context.Context, key []byte, value []byte)
|
|||||||
val, err := jsoniter.Marshal(esEntry)
|
val, err := jsoniter.Marshal(esEntry)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("insert key(%s) %v.", string(key), err)
|
glog.Errorf("insert key(%s) %v.", string(key), err)
|
||||||
return fmt.Errorf("insert key %v.", err)
|
return fmt.Errorf("insert key %v", err)
|
||||||
}
|
}
|
||||||
_, err = store.client.Index().
|
_, err = store.client.Index().
|
||||||
Index(indexKV).
|
Index(indexKV).
|
||||||
|
|||||||
+8
-5
@@ -38,11 +38,12 @@ type Entry struct {
|
|||||||
// the following is for files
|
// the following is for files
|
||||||
Chunks []*filer_pb.FileChunk `json:"chunks,omitempty"`
|
Chunks []*filer_pb.FileChunk `json:"chunks,omitempty"`
|
||||||
|
|
||||||
HardLinkId HardLinkId
|
HardLinkId HardLinkId
|
||||||
HardLinkCounter int32
|
HardLinkCounter int32
|
||||||
Content []byte
|
Content []byte
|
||||||
Remote *filer_pb.RemoteEntry
|
Remote *filer_pb.RemoteEntry
|
||||||
Quota int64
|
Quota int64
|
||||||
|
WORMEnforcedAtTsNs int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (entry *Entry) Size() uint64 {
|
func (entry *Entry) Size() uint64 {
|
||||||
@@ -98,6 +99,7 @@ func (entry *Entry) ToExistingProtoEntry(message *filer_pb.Entry) {
|
|||||||
message.Content = entry.Content
|
message.Content = entry.Content
|
||||||
message.RemoteEntry = entry.Remote
|
message.RemoteEntry = entry.Remote
|
||||||
message.Quota = entry.Quota
|
message.Quota = entry.Quota
|
||||||
|
message.WormEnforcedAtTsNs = entry.WORMEnforcedAtTsNs
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromPbEntryToExistingEntry(message *filer_pb.Entry, fsEntry *Entry) {
|
func FromPbEntryToExistingEntry(message *filer_pb.Entry, fsEntry *Entry) {
|
||||||
@@ -110,6 +112,7 @@ func FromPbEntryToExistingEntry(message *filer_pb.Entry, fsEntry *Entry) {
|
|||||||
fsEntry.Remote = message.RemoteEntry
|
fsEntry.Remote = message.RemoteEntry
|
||||||
fsEntry.Quota = message.Quota
|
fsEntry.Quota = message.Quota
|
||||||
fsEntry.FileSize = FileSize(message)
|
fsEntry.FileSize = FileSize(message)
|
||||||
|
fsEntry.WORMEnforcedAtTsNs = message.WormEnforcedAtTsNs
|
||||||
}
|
}
|
||||||
|
|
||||||
func (entry *Entry) ToProtoFullEntry() *filer_pb.FullEntry {
|
func (entry *Entry) ToProtoFullEntry() *filer_pb.FullEntry {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package filer
|
package filer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
@@ -44,6 +45,9 @@ func (group *ChunkGroup) AddChunk(chunk *filer_pb.FileChunk) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (group *ChunkGroup) ReadDataAt(fileSize int64, buff []byte, offset int64) (n int, tsNs int64, err error) {
|
func (group *ChunkGroup) ReadDataAt(fileSize int64, buff []byte, offset int64) (n int, tsNs int64, err error) {
|
||||||
|
if offset >= fileSize {
|
||||||
|
return 0, 0, io.EOF
|
||||||
|
}
|
||||||
|
|
||||||
group.sectionsLock.RLock()
|
group.sectionsLock.RLock()
|
||||||
defer group.sectionsLock.RUnlock()
|
defer group.sectionsLock.RUnlock()
|
||||||
|
|||||||
@@ -130,7 +130,9 @@ func retriedStreamFetchChunkData(writer io.Writer, urlStrings []string, jwt stri
|
|||||||
var totalWritten int
|
var totalWritten int
|
||||||
|
|
||||||
for waitTime := time.Second; waitTime < util.RetryWaitTime; waitTime += waitTime / 2 {
|
for waitTime := time.Second; waitTime < util.RetryWaitTime; waitTime += waitTime / 2 {
|
||||||
|
retriedCnt := 0
|
||||||
for _, urlString := range urlStrings {
|
for _, urlString := range urlStrings {
|
||||||
|
retriedCnt++
|
||||||
var localProcessed int
|
var localProcessed int
|
||||||
var writeErr error
|
var writeErr error
|
||||||
shouldRetry, err = util_http.ReadUrlAsStreamAuthenticated(urlString+"?readDeleted=true", jwt, cipherKey, isGzipped, isFullChunk, offset, size, func(data []byte) {
|
shouldRetry, err = util_http.ReadUrlAsStreamAuthenticated(urlString+"?readDeleted=true", jwt, cipherKey, isGzipped, isFullChunk, offset, size, func(data []byte) {
|
||||||
@@ -161,6 +163,10 @@ func retriedStreamFetchChunkData(writer io.Writer, urlStrings []string, jwt stri
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// all nodes have tried it
|
||||||
|
if retriedCnt == len(urlStrings) {
|
||||||
|
break
|
||||||
|
}
|
||||||
if err != nil && shouldRetry {
|
if err != nil && shouldRetry {
|
||||||
glog.V(0).Infof("retry reading in %v", waitTime)
|
glog.V(0).Infof("retry reading in %v", waitTime)
|
||||||
time.Sleep(waitTime)
|
time.Sleep(waitTime)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package filer
|
package filer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
)
|
)
|
||||||
|
|
||||||
const SectionSize = 2 * 1024 * 1024 * 32 // 64MiB
|
const SectionSize = 2 * 1024 * 1024 * 32 // 64MiB
|
||||||
@@ -62,11 +63,6 @@ func removeGarbageChunks(section *FileChunkSection, garbageFileIds map[string]st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (section *FileChunkSection) setupForRead(group *ChunkGroup, fileSize int64) {
|
func (section *FileChunkSection) setupForRead(group *ChunkGroup, fileSize int64) {
|
||||||
if section.isPrepared {
|
|
||||||
section.reader.fileSize = fileSize
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
section.lock.Lock()
|
section.lock.Lock()
|
||||||
defer section.lock.Unlock()
|
defer section.lock.Unlock()
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package filer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"golang.org/x/exp/slices"
|
|
||||||
"log"
|
"log"
|
||||||
|
"slices"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package filer
|
|||||||
import (
|
import (
|
||||||
"container/list"
|
"container/list"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
"golang.org/x/exp/slices"
|
"slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readResolvedChunks(chunks []*filer_pb.FileChunk, startOffset int64, stopOffset int64) (visibles *IntervalList[*VisibleInterval]) {
|
func readResolvedChunks(chunks []*filer_pb.FileChunk, startOffset int64, stopOffset int64) (visibles *IntervalList[*VisibleInterval]) {
|
||||||
|
|||||||
+10
-1
@@ -3,6 +3,7 @@ package filer
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/s3api/s3bucket"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -247,7 +248,7 @@ func (f *Filer) ensureParentDirectoryEntry(ctx context.Context, entry *Entry, di
|
|||||||
}
|
}
|
||||||
|
|
||||||
dirPath := "/" + util.Join(dirParts[:level]...)
|
dirPath := "/" + util.Join(dirParts[:level]...)
|
||||||
// fmt.Printf("%d directory: %+v\n", i, dirPath)
|
// fmt.Printf("%d dirPath: %+v\n", level, dirPath)
|
||||||
|
|
||||||
// check the store directly
|
// check the store directly
|
||||||
glog.V(4).Infof("find uncached directory: %s", dirPath)
|
glog.V(4).Infof("find uncached directory: %s", dirPath)
|
||||||
@@ -256,6 +257,14 @@ func (f *Filer) ensureParentDirectoryEntry(ctx context.Context, entry *Entry, di
|
|||||||
// no such existing directory
|
// no such existing directory
|
||||||
if dirEntry == nil {
|
if dirEntry == nil {
|
||||||
|
|
||||||
|
// fmt.Printf("dirParts: %v %v %v\n", dirParts[0], dirParts[1], dirParts[2])
|
||||||
|
// dirParts[0] == "" and dirParts[1] == "buckets"
|
||||||
|
if len(dirParts) >= 3 && dirParts[1] == "buckets" {
|
||||||
|
if err := s3bucket.VerifyS3BucketName(dirParts[2]); err != nil {
|
||||||
|
return fmt.Errorf("invalid bucket name %s: %v", dirParts[2], err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ensure parent directory
|
// ensure parent directory
|
||||||
if err = f.ensureParentDirectoryEntry(ctx, entry, dirParts, level-1, isFromOtherCluster); err != nil {
|
if err = f.ensureParentDirectoryEntry(ctx, entry, dirParts, level-1, isFromOtherCluster); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
@@ -111,7 +112,7 @@ func (fc *FilerConf) doLoadConf(conf *filer_pb.FilerConf) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fc *FilerConf) GetLocationConf(locationPrefix string)(locConf *filer_pb.FilerConf_PathConf, found bool) {
|
func (fc *FilerConf) GetLocationConf(locationPrefix string) (locConf *filer_pb.FilerConf_PathConf, found bool) {
|
||||||
return fc.rules.Get([]byte(locationPrefix))
|
return fc.rules.Get([]byte(locationPrefix))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +189,13 @@ func mergePathConf(a, b *filer_pb.FilerConf_PathConf) {
|
|||||||
a.Rack = util.Nvl(b.Rack, a.Rack)
|
a.Rack = util.Nvl(b.Rack, a.Rack)
|
||||||
a.DataNode = util.Nvl(b.DataNode, a.DataNode)
|
a.DataNode = util.Nvl(b.DataNode, a.DataNode)
|
||||||
a.DisableChunkDeletion = b.DisableChunkDeletion || a.DisableChunkDeletion
|
a.DisableChunkDeletion = b.DisableChunkDeletion || a.DisableChunkDeletion
|
||||||
|
a.Worm = b.Worm || a.Worm
|
||||||
|
if b.WormRetentionTimeSeconds > 0 {
|
||||||
|
a.WormRetentionTimeSeconds = b.WormRetentionTimeSeconds
|
||||||
|
}
|
||||||
|
if b.WormGracePeriodSeconds > 0 {
|
||||||
|
a.WormGracePeriodSeconds = b.WormGracePeriodSeconds
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fc *FilerConf) ToProto() *filer_pb.FilerConf {
|
func (fc *FilerConf) ToProto() *filer_pb.FilerConf {
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ func (f *Filer) ReadPersistedLogBuffer(startPosition log_buffer.MessagePosition,
|
|||||||
err = fmt.Errorf("reading from persisted logs: %v", visitErr)
|
err = fmt.Errorf("reading from persisted logs: %v", visitErr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var logEntry *filer_pb.LogEntry
|
var logEntry *filer_pb.LogEntry
|
||||||
for {
|
for {
|
||||||
logEntry, visitErr = visitor.GetNext()
|
logEntry, visitErr = visitor.GetNext()
|
||||||
if visitErr != nil {
|
if visitErr != nil {
|
||||||
|
|||||||
@@ -4,15 +4,16 @@ import (
|
|||||||
"container/heap"
|
"container/heap"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util/log_buffer"
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
"io"
|
"io"
|
||||||
"math"
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/util/log_buffer"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
@@ -39,6 +40,19 @@ func (f *Filer) collectPersistedLogBuffer(startPosition log_buffer.MessagePositi
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Filer) HasPersistedLogFiles(startPosition log_buffer.MessagePosition) (bool, error) {
|
||||||
|
startDate := fmt.Sprintf("%04d-%02d-%02d", startPosition.Year(), startPosition.Month(), startPosition.Day())
|
||||||
|
dayEntries, _, listDayErr := f.ListDirectoryEntries(context.Background(), SystemLogDir, startDate, true, 1, "", "", "")
|
||||||
|
|
||||||
|
if listDayErr != nil {
|
||||||
|
return false, fmt.Errorf("fail to list log by day: %v", listDayErr)
|
||||||
|
}
|
||||||
|
if len(dayEntries) == 0 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
type LogEntryItem struct {
|
type LogEntryItem struct {
|
||||||
Entry *filer_pb.LogEntry
|
Entry *filer_pb.LogEntry
|
||||||
@@ -103,7 +117,7 @@ func (o *OrderedLogVisitor) GetNext() (logEntry *filer_pb.LogEntry, err error) {
|
|||||||
if nextErr != nil {
|
if nextErr != nil {
|
||||||
if nextErr == io.EOF {
|
if nextErr == io.EOF {
|
||||||
// do nothing since the filer has no more log entries
|
// do nothing since the filer has no more log entries
|
||||||
}else {
|
} else {
|
||||||
return nil, fmt.Errorf("failed to get next log entry: %v", nextErr)
|
return nil, fmt.Errorf("failed to get next log entry: %v", nextErr)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -230,7 +244,7 @@ func (c *LogFileEntryCollector) collectMore(v *OrderedLogVisitor) (err error) {
|
|||||||
if nextErr != nil {
|
if nextErr != nil {
|
||||||
if nextErr == io.EOF {
|
if nextErr == io.EOF {
|
||||||
// do nothing since the filer has no more log entries
|
// do nothing since the filer has no more log entries
|
||||||
}else {
|
} else {
|
||||||
return fmt.Errorf("failed to get next log entry for %v: %v", entryName, err)
|
return fmt.Errorf("failed to get next log entry for %v: %v", entryName, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -164,6 +164,9 @@ func (fsw *FilerStoreWrapper) FindEntry(ctx context.Context, fp util.FullPath) (
|
|||||||
entry, err = actualStore.FindEntry(ctx, fp)
|
entry, err = actualStore.FindEntry(ctx, fp)
|
||||||
// glog.V(4).Infof("FindEntry %s: %v", fp, err)
|
// glog.V(4).Infof("FindEntry %s: %v", fp, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if fsw.CanDropWholeBucket() && strings.Contains(err.Error(), "Table") && strings.Contains(err.Error(), "doesn't exist") {
|
||||||
|
err = filer_pb.ErrNotFound
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,10 +37,9 @@ func Replay(filerStore FilerStore, resp *filer_pb.SubscribeMetadataResponse) err
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ParallelProcessDirectoryStructure processes each entry in parallel, and also ensure parent directories are processed first.
|
// ParallelProcessDirectoryStructure processes each entry in parallel, and also ensure parent directories are processed first.
|
||||||
// This also assumes the parent directories are in the entryChan already.
|
// This also assumes the parent directories are in the entryChan already.
|
||||||
func ParallelProcessDirectoryStructure(entryChan chan *Entry, concurrency int, eachEntryFn func(entry *Entry)(error)) (firstErr error) {
|
func ParallelProcessDirectoryStructure(entryChan chan *Entry, concurrency int, eachEntryFn func(entry *Entry) error) (firstErr error) {
|
||||||
|
|
||||||
executors := util.NewLimitedConcurrentExecutor(concurrency)
|
executors := util.NewLimitedConcurrentExecutor(concurrency)
|
||||||
|
|
||||||
|
|||||||
+14
-7
@@ -97,6 +97,10 @@ func NewChunkReaderAtFromClient(readerCache *ReaderCache, chunkViews *IntervalLi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChunkReadAt) Size() int64 {
|
||||||
|
return c.fileSize
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChunkReadAt) Close() error {
|
func (c *ChunkReadAt) Close() error {
|
||||||
c.readerCache.destroy()
|
c.readerCache.destroy()
|
||||||
return nil
|
return nil
|
||||||
@@ -169,15 +173,14 @@ func (c *ChunkReadAt) doReadAt(p []byte, offset int64) (n int, ts int64, err err
|
|||||||
// zero the remaining bytes if a gap exists at the end of the last chunk (or a fully sparse file)
|
// zero the remaining bytes if a gap exists at the end of the last chunk (or a fully sparse file)
|
||||||
if err == nil && remaining > 0 {
|
if err == nil && remaining > 0 {
|
||||||
var delta int64
|
var delta int64
|
||||||
if c.fileSize > startOffset {
|
if c.fileSize >= startOffset {
|
||||||
delta = min(remaining, c.fileSize-startOffset)
|
delta = min(remaining, c.fileSize-startOffset)
|
||||||
startOffset -= offset
|
startOffset -= offset
|
||||||
} else {
|
|
||||||
delta = remaining
|
|
||||||
startOffset = max(startOffset-offset, startOffset-remaining-offset)
|
|
||||||
}
|
}
|
||||||
glog.V(4).Infof("zero2 [%d,%d) of file size %d bytes", startOffset, startOffset+delta, c.fileSize)
|
if delta > 0 {
|
||||||
n += zero(p, startOffset, delta)
|
glog.V(4).Infof("zero2 [%d,%d) of file size %d bytes", startOffset, startOffset+delta, c.fileSize)
|
||||||
|
n += zero(p, startOffset, delta)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err == nil && offset+int64(len(p)) >= c.fileSize {
|
if err == nil && offset+int64(len(p)) >= c.fileSize {
|
||||||
@@ -199,7 +202,8 @@ func (c *ChunkReadAt) readChunkSliceAt(buffer []byte, chunkView *ChunkView, next
|
|||||||
return fetchChunkRange(buffer, c.readerCache.lookupFileIdFn, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int64(offset))
|
return fetchChunkRange(buffer, c.readerCache.lookupFileIdFn, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int64(offset))
|
||||||
}
|
}
|
||||||
|
|
||||||
n, err = c.readerCache.ReadChunkAt(buffer, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int64(offset), int(chunkView.ChunkSize), (uint64(chunkView.ViewOffset)+chunkView.ChunkSize) <= c.readerCache.chunkCache.GetMaxFilePartSizeInCache())
|
shouldCache := (uint64(chunkView.ViewOffset) + chunkView.ChunkSize) <= c.readerCache.chunkCache.GetMaxFilePartSizeInCache()
|
||||||
|
n, err = c.readerCache.ReadChunkAt(buffer, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int64(offset), int(chunkView.ChunkSize), shouldCache)
|
||||||
if c.lastChunkFid != chunkView.FileId {
|
if c.lastChunkFid != chunkView.FileId {
|
||||||
if chunkView.OffsetInChunk == 0 { // start of a new chunk
|
if chunkView.OffsetInChunk == 0 { // start of a new chunk
|
||||||
if c.lastChunkFid != "" {
|
if c.lastChunkFid != "" {
|
||||||
@@ -215,6 +219,9 @@ func (c *ChunkReadAt) readChunkSliceAt(buffer []byte, chunkView *ChunkView, next
|
|||||||
}
|
}
|
||||||
|
|
||||||
func zero(buffer []byte, start, length int64) int {
|
func zero(buffer []byte, start, length int64) int {
|
||||||
|
if length <= 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
end := min(start+length, int64(len(buffer)))
|
end := min(start+length, int64(len(buffer)))
|
||||||
start = max(start, 0)
|
start = max(start, 0)
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func (m *mockChunkCache) ReadChunkAt(data []byte, fileId string, offset uint64)
|
|||||||
func (m *mockChunkCache) SetChunk(fileId string, data []byte) {
|
func (m *mockChunkCache) SetChunk(fileId string, data []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockChunkCache) GetMaxFilePartSizeInCache() (uint64) {
|
func (m *mockChunkCache) GetMaxFilePartSizeInCache() uint64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ func TestReaderAt(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testReadAt(t, readerAt, 0, 10, 10, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 0, 10, 10, io.EOF, nil, nil)
|
||||||
testReadAt(t, readerAt, 0, 12, 12, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 0, 12, 10, io.EOF, nil, nil)
|
||||||
testReadAt(t, readerAt, 2, 8, 8, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 2, 8, 8, io.EOF, nil, nil)
|
||||||
testReadAt(t, readerAt, 3, 6, 6, nil, nil, nil)
|
testReadAt(t, readerAt, 3, 6, 6, nil, nil, nil)
|
||||||
|
|
||||||
@@ -131,8 +131,8 @@ func TestReaderAt0(t *testing.T) {
|
|||||||
testReadAt(t, readerAt, 3, 16, 7, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 3, 16, 7, io.EOF, nil, nil)
|
||||||
testReadAt(t, readerAt, 3, 5, 5, nil, nil, nil)
|
testReadAt(t, readerAt, 3, 5, 5, nil, nil, nil)
|
||||||
|
|
||||||
testReadAt(t, readerAt, 11, 5, 5, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 11, 5, 0, io.EOF, nil, nil)
|
||||||
testReadAt(t, readerAt, 10, 5, 5, io.EOF, nil, nil)
|
testReadAt(t, readerAt, 10, 5, 0, io.EOF, nil, nil)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ func (rc *ReaderCache) MaybeCache(chunkViews *Interval[*ChunkView]) {
|
|||||||
|
|
||||||
// glog.V(4).Infof("prefetch %s offset %d", chunkView.FileId, chunkView.ViewOffset)
|
// glog.V(4).Infof("prefetch %s offset %d", chunkView.FileId, chunkView.ViewOffset)
|
||||||
// cache this chunk if not yet
|
// cache this chunk if not yet
|
||||||
cacher := newSingleChunkCacher(rc, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int(chunkView.ChunkSize), (uint64(chunkView.ViewOffset)+chunkView.ChunkSize) <= rc.chunkCache.GetMaxFilePartSizeInCache())
|
shouldCache := (uint64(chunkView.ViewOffset) + chunkView.ChunkSize) <= rc.chunkCache.GetMaxFilePartSizeInCache()
|
||||||
|
cacher := newSingleChunkCacher(rc, chunkView.FileId, chunkView.CipherKey, chunkView.IsGzipped, int(chunkView.ChunkSize), shouldCache)
|
||||||
go cacher.startCaching()
|
go cacher.startCaching()
|
||||||
<-cacher.cacheStartedCh
|
<-cacher.cacheStartedCh
|
||||||
rc.downloaders[chunkView.FileId] = cacher
|
rc.downloaders[chunkView.FileId] = cacher
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package redis
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"golang.org/x/exp/slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package redis3
|
package redis3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/redis/go-redis/v9"
|
|
||||||
"github.com/go-redsync/redsync/v4"
|
"github.com/go-redsync/redsync/v4"
|
||||||
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package redis3
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/redis/go-redis/v9"
|
|
||||||
"github.com/go-redsync/redsync/v4"
|
"github.com/go-redsync/redsync/v4"
|
||||||
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package redis3
|
package redis3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/redis/go-redis/v9"
|
|
||||||
"github.com/go-redsync/redsync/v4"
|
"github.com/go-redsync/redsync/v4"
|
||||||
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
"github.com/go-redsync/redsync/v4/redis/goredis/v9"
|
||||||
|
"github.com/redis/go-redis/v9"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/exp/slices"
|
"slices"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/glog"
|
"github.com/seaweedfs/seaweedfs/weed/glog"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/stats"
|
"github.com/seaweedfs/seaweedfs/weed/stats"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
|
||||||
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
|
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
|
||||||
|
"github.com/seaweedfs/seaweedfs/weed/wdclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
var getLookupFileIdBackoffSchedule = []time.Duration{
|
var getLookupFileIdBackoffSchedule = []time.Duration{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user