2019-02-14 15:01:33 +03:00
package main
import (
2019-02-14 19:18:43 +03:00
"encoding/json"
2019-02-14 15:01:33 +03:00
"log"
2019-02-14 17:35:18 +03:00
"math/rand"
2019-02-14 19:18:43 +03:00
"time"
2019-02-14 15:01:33 +03:00
)
2019-02-14 19:18:43 +03:00
type Moncommand struct {
Prefix string ` json:"prefix" `
Pool string ` json:"pool" `
Format string ` json:"format" `
Var string ` json:"var" `
}
type Monanswer struct {
Pool string ` json:"pool" `
PoolId int ` json:"pool_id" `
Size int ` json:"size" `
}
2019-02-14 15:01:33 +03:00
func main ( ) {
2019-02-14 17:35:18 +03:00
params := Route ( )
cephconn := connectioninit ( & params )
defer cephconn . conn . Shutdown ( )
2019-02-14 17:59:40 +03:00
2019-02-14 19:18:43 +03:00
// https://tracker.ceph.com/issues/24114
time . Sleep ( time . Millisecond * 100 )
2019-02-14 17:35:18 +03:00
stats , _ := cephconn . ioctx . GetPoolStats ( )
2019-02-14 15:01:33 +03:00
log . Println ( stats )
2019-02-14 17:59:40 +03:00
log . Printf ( "%v\n" , params . blocksize )
2019-02-14 19:18:43 +03:00
2019-02-14 17:35:18 +03:00
var buffs [ ] [ ] byte
2019-02-14 17:59:40 +03:00
for i := 0 ; i < 2 * params . threadsCount ; i ++ {
buffs = append ( buffs , make ( [ ] byte , params . blocksize ) )
2019-02-14 17:35:18 +03:00
}
2019-02-14 19:18:43 +03:00
2019-02-14 17:35:18 +03:00
for num := range buffs {
_ , err := rand . Read ( buffs [ num ] )
if err != nil {
log . Fatalln ( err )
}
}
2019-02-14 19:18:43 +03:00
monjson , err := json . Marshal ( Moncommand { Prefix : "osd pool get" , Pool : params . pool , Format : "json" , Var : "size" } )
if err != nil {
log . Fatalf ( "Can't marshal json mon query. Error: %v" , err )
}
monrawanswer , _ , err := cephconn . conn . MonCommand ( monjson )
if err != nil {
log . Fatalf ( "Failed exec monCommand. Error: %v" , err )
}
monanswer := Monanswer { }
if err := json . Unmarshal ( [ ] byte ( monrawanswer ) , & monanswer ) ; err != nil {
log . Fatalf ( "Can't parse monitor answer. Error: %v" , err )
}
if monanswer . Size != 1 {
log . Fatalf ( "Pool size must be 1. Current size for pool %v is %v. Don't forget that it must be useless pool (not production). Do:\n # ceph osd pool set %v min_size 1\n # ceph osd pool set %v size 1" ,
monanswer . Pool , monanswer . Size , monanswer . Pool , monanswer . Pool )
}
2019-02-14 17:35:18 +03:00
2019-02-14 15:01:33 +03:00
}