cubefs

Форк
0
83 строки · 1.7 Кб
1
/*
2
 * Regression Test Case
3
 * - fix: overlapping extents lost due to concurrent client appending keys
4
 *
5
 * Steps:
6
 * - mount the same volume to <path1> and <path2>
7
 * - go run main.go <path1>/testfile <path2>/testfile
8
 *
9
 * Expected results:
10
 * - Pass: fsync outPath1 gets IO error due to conflict extents.
11
 * - Fail: fsync succedded, but reading the file gets IO error due toextents not exist.
12
 */
13

14
package main
15

16
import (
17
	"fmt"
18
	"os"
19
)
20

21
func main() {
22
	if len(os.Args) != 3 {
23
		fmt.Printf("Invalid num of args, expecting 2 args!\n")
24
		return
25
	}
26

27
	// Note that outPath1 and outPath2 should point to the same underlying file
28
	// in CubeFS but through different mount point.
29
	outPath1 := os.Args[1]
30
	outPath2 := os.Args[2]
31
	data := "aoifjiwjefojwofoiwenfowepojpjoipgnoirngo\n"
32

33
	file1, err := os.OpenFile(outPath1, os.O_WRONLY|os.O_CREATE, 0o666)
34
	if err != nil {
35
		fmt.Println(err)
36
		return
37
	}
38
	defer file1.Close()
39
	file2, err := os.OpenFile(outPath2, os.O_WRONLY|os.O_CREATE, 0o666)
40
	if err != nil {
41
		fmt.Println(err)
42
		return
43
	}
44
	defer file2.Close()
45

46
	// NeedAfterAlloc to write to normal extent, so avoid writing to the beginning 1M
47
	file1.Seek(1*1024*1024, 0)
48
	file2.Seek(1*1024*1024, 0)
49

50
	_, err = file1.Write([]byte(data))
51
	if err != nil {
52
		fmt.Println(err)
53
		return
54
	}
55
	if err = file1.Sync(); err != nil {
56
		fmt.Println(err)
57
		return
58
	}
59

60
	for i := 0; i < 2; i++ {
61
		_, err = file2.Write([]byte(data))
62
		if err != nil {
63
			fmt.Println(err)
64
			return
65
		}
66
	}
67
	if err = file2.Sync(); err != nil {
68
		fmt.Println(err)
69
		return
70
	}
71

72
	_, err = file1.Write([]byte(data))
73
	if err != nil {
74
		fmt.Println(err)
75
		return
76
	}
77
	if err = file1.Sync(); err != nil {
78
		fmt.Println(err)
79
		return
80
	}
81

82
	return
83
}
84

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.