-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
316 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
--- | ||
name: Bug report | ||
about: Create a report to help us improve | ||
title: '' | ||
labels: community, triage | ||
assignees: '' | ||
|
||
--- | ||
|
||
## NOTE | ||
If this case is urgent, please subscribe to [Subnet](https://min.io/pricing) so that our 24/7 support team may help you faster. | ||
|
||
<!--- Provide a general summary of the issue in the Title above --> | ||
|
||
## Expected Behavior | ||
<!--- If you're describing a bug, tell us what should happen --> | ||
<!--- If you're suggesting a change/improvement, tell us how it should work --> | ||
|
||
## Current Behavior | ||
<!--- If describing a bug, tell us what happens instead of the expected behavior --> | ||
<!--- If suggesting a change/improvement, explain the difference from current behavior --> | ||
|
||
## Possible Solution | ||
<!--- Not obligatory, but suggest a fix/reason for the bug, --> | ||
<!--- or ideas how to implement the addition or change --> | ||
|
||
## Steps to Reproduce (for bugs) | ||
<!--- Provide a link to a live example, or an unambiguous set of steps to --> | ||
<!--- reproduce this bug. Include code to reproduce, if relevant --> | ||
<!--- and make sure you have followed https://github.com/minio/minio/tree/release/docs/debugging to capture relevant logs --> | ||
|
||
1. | ||
2. | ||
3. | ||
4. | ||
|
||
## Context | ||
<!--- How has this issue affected you? What are you trying to accomplish? --> | ||
<!--- Providing context helps us come up with a solution that is most useful in the real world --> | ||
|
||
## Regression | ||
<!-- Is this issue a regression? (Yes / No) --> | ||
<!-- If Yes, optionally please include minio version or commit id or PR# that caused this regression, if you have these details. --> | ||
|
||
## Your Environment | ||
<!--- Include as many relevant details about the environment you experienced the bug in --> | ||
* Version used (`minio --version`): | ||
* Server setup and configuration: | ||
* Operating System and version (`uname -a`): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
blank_issues_enabled: false | ||
contact_links: | ||
- name: MinIO Community Support | ||
url: https://slack.min.io | ||
about: Join here for Community Support | ||
- name: MinIO SUBNET Support | ||
url: https://min.io/pricing | ||
about: Join here for Enterprise Support |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
name: Feature request | ||
about: Suggest an idea for this project | ||
title: '' | ||
labels: community, triage | ||
assignees: '' | ||
|
||
--- | ||
|
||
**Is your feature request related to a problem? Please describe.** | ||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] | ||
|
||
**Describe the solution you'd like** | ||
A clear and concise description of what you want to happen. | ||
|
||
**Describe alternatives you've considered** | ||
A clear and concise description of any alternative solutions or features you've considered. | ||
|
||
**Additional context** | ||
Add any other context or screenshots about the feature request here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
//go:build ignore | ||
// +build ignore | ||
|
||
// | ||
// MinIO Object Storage (c) 2022 MinIO, Inc. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// | ||
|
||
package main | ||
|
||
import ( | ||
"context" | ||
"encoding/json" | ||
"fmt" | ||
"log" | ||
"os" | ||
"time" | ||
|
||
"github.com/minio/madmin-go" | ||
) | ||
|
||
func main() { | ||
// Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY are | ||
// dummy values, please replace them with original values. | ||
|
||
// API requests are secure (HTTPS) if secure=true and insecure (HTTP) otherwise. | ||
// New returns an MinIO Admin client object. | ||
madmClnt, err := madmin.New(os.Args[1], os.Args[2], os.Args[3], false) | ||
if err != nil { | ||
log.Fatalln(err) | ||
} | ||
|
||
opts := madmin.HealOpts{ | ||
Recursive: true, // recursively heal all objects at 'prefix' | ||
Remove: true, // remove content that has lost quorum and not recoverable | ||
Recreate: true, // rewrite all old non-inlined xl.meta to new xl.meta | ||
ScanMode: madmin.HealNormalScan, // by default do not do 'deep' scanning | ||
} | ||
|
||
start, _, err := madmClnt.Heal(context.Background(), "healing-rewrite-bucket", "", opts, "", false, false) | ||
if err != nil { | ||
log.Fatalln(err) | ||
} | ||
fmt.Println("Healstart sequence ===") | ||
enc := json.NewEncoder(os.Stdout) | ||
if err = enc.Encode(&start); err != nil { | ||
log.Fatalln(err) | ||
} | ||
|
||
fmt.Println() | ||
for { | ||
_, status, err := madmClnt.Heal(context.Background(), "healing-rewrite-bucket", "", opts, start.ClientToken, false, false) | ||
if status.Summary == "finished" { | ||
fmt.Println("Healstatus on items ===") | ||
for _, item := range status.Items { | ||
if err = enc.Encode(&item); err != nil { | ||
log.Fatalln(err) | ||
} | ||
} | ||
break | ||
} | ||
if status.Summary == "stopped" { | ||
fmt.Println("Healstatus on items ===") | ||
fmt.Println("Heal failed with", status.FailureDetail) | ||
break | ||
} | ||
|
||
for _, item := range status.Items { | ||
if err = enc.Encode(&item); err != nil { | ||
log.Fatalln(err) | ||
} | ||
} | ||
|
||
time.Sleep(time.Second) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
#!/bin/bash -e | ||
|
||
set -E | ||
set -o pipefail | ||
set -x | ||
|
||
WORK_DIR="$PWD/.verify-$RANDOM" | ||
MINIO_CONFIG_DIR="$WORK_DIR/.minio" | ||
MINIO_OLD=( "$PWD/minio.RELEASE.2020-10-28T08-16-50Z" --config-dir "$MINIO_CONFIG_DIR" server ) | ||
MINIO=( "$PWD/minio" --config-dir "$MINIO_CONFIG_DIR" server ) | ||
|
||
if [ ! -x "$PWD/minio" ]; then | ||
echo "minio executable binary not found in current directory" | ||
exit 1 | ||
fi | ||
|
||
function download_old_release() { | ||
if [ ! -f minio.RELEASE.2020-10-28T08-16-50Z ]; then | ||
curl --silent -O https://dl.minio.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2020-10-28T08-16-50Z | ||
chmod a+x minio.RELEASE.2020-10-28T08-16-50Z | ||
fi | ||
} | ||
|
||
function verify_rewrite() { | ||
start_port=$1 | ||
|
||
export MINIO_ACCESS_KEY=minio | ||
export MINIO_SECRET_KEY=minio123 | ||
export MC_HOST_minio="http://minio:minio123@127.0.0.1:${start_port}/" | ||
unset MINIO_KMS_AUTO_ENCRYPTION # do not auto-encrypt objects | ||
export MINIO_CI_CD=1 | ||
|
||
MC_BUILD_DIR="mc-$RANDOM" | ||
if ! git clone --quiet https://github.com/minio/mc "$MC_BUILD_DIR"; then | ||
echo "failed to download https://github.com/minio/mc" | ||
purge "${MC_BUILD_DIR}" | ||
exit 1 | ||
fi | ||
|
||
(cd "${MC_BUILD_DIR}" && go build -o "$WORK_DIR/mc") | ||
|
||
# remove mc source. | ||
purge "${MC_BUILD_DIR}" | ||
|
||
"${MINIO_OLD[@]}" --address ":$start_port" "${WORK_DIR}/xl{1...16}" > "${WORK_DIR}/server1.log" 2>&1 & | ||
pid=$! | ||
disown $pid | ||
sleep 10 | ||
|
||
if ! ps -p ${pid} 1>&2 >/dev/null; then | ||
echo "server1 log:" | ||
cat "${WORK_DIR}/server1.log" | ||
echo "FAILED" | ||
purge "$WORK_DIR" | ||
exit 1 | ||
fi | ||
|
||
"${WORK_DIR}/mc" mb minio/healing-rewrite-bucket --quiet --with-lock | ||
"${WORK_DIR}/mc" cp \ | ||
buildscripts/verify-build.sh \ | ||
minio/healing-rewrite-bucket/ \ | ||
--disable-multipart --quiet | ||
|
||
"${WORK_DIR}/mc" cp \ | ||
buildscripts/verify-build.sh \ | ||
minio/healing-rewrite-bucket/ \ | ||
--disable-multipart --quiet | ||
|
||
"${WORK_DIR}/mc" cp \ | ||
buildscripts/verify-build.sh \ | ||
minio/healing-rewrite-bucket/ \ | ||
--disable-multipart --quiet | ||
|
||
kill ${pid} | ||
sleep 3 | ||
|
||
"${MINIO[@]}" --address ":$start_port" "${WORK_DIR}/xl{1...16}" > "${WORK_DIR}/server1.log" 2>&1 & | ||
pid=$! | ||
disown $pid | ||
sleep 10 | ||
|
||
if ! ps -p ${pid} 1>&2 >/dev/null; then | ||
echo "server1 log:" | ||
cat "${WORK_DIR}/server1.log" | ||
echo "FAILED" | ||
purge "$WORK_DIR" | ||
exit 1 | ||
fi | ||
|
||
go build ./docs/debugging/s3-check-md5/ | ||
if ! ./s3-check-md5 \ | ||
-debug \ | ||
-versions \ | ||
-access-key minio \ | ||
-secret-key minio123 \ | ||
-endpoint http://127.0.0.1:${start_port}/ 2>&1 | grep INTACT; then | ||
echo "server1 log:" | ||
cat "${WORK_DIR}/server1.log" | ||
echo "FAILED" | ||
mkdir -p inspects | ||
(cd inspects; "${WORK_DIR}/mc" admin inspect minio/healing-rewrite-bucket/verify-build.sh/**) | ||
|
||
"${WORK_DIR}/mc" mb play/inspects | ||
"${WORK_DIR}/mc" mirror inspects play/inspects | ||
|
||
purge "$WORK_DIR" | ||
exit 1 | ||
fi | ||
|
||
go run ./buildscripts/heal-manual.go "127.0.0.1:${start_port}" "minio" "minio123" | ||
sleep 1 | ||
|
||
if ! ./s3-check-md5 \ | ||
-debug \ | ||
-versions \ | ||
-access-key minio \ | ||
-secret-key minio123 \ | ||
-endpoint http://127.0.0.1:${start_port}/ 2>&1 | grep INTACT; then | ||
echo "server1 log:" | ||
cat "${WORK_DIR}/server1.log" | ||
echo "FAILED" | ||
mkdir -p inspects | ||
(cd inspects; "${WORK_DIR}/mc" admin inspect minio/healing-rewrite-bucket/verify-build.sh/**) | ||
|
||
"${WORK_DIR}/mc" mb play/inspects | ||
"${WORK_DIR}/mc" mirror inspects play/inspects | ||
|
||
purge "$WORK_DIR" | ||
exit 1 | ||
fi | ||
|
||
kill ${pid} | ||
} | ||
|
||
function main() { | ||
download_old_release | ||
|
||
start_port=$(shuf -i 10000-65000 -n 1) | ||
|
||
verify_rewrite ${start_port} | ||
} | ||
|
||
function purge() | ||
{ | ||
rm -rf "$1" | ||
} | ||
|
||
( main "$@" ) | ||
rv=$? | ||
purge "$WORK_DIR" | ||
exit "$rv" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters