示例#1
0
func (d *radosdesc) New() (factory.DrvInterface, error) {
	chunksize := uint64(defaultChunkSize)
	if setting.Chunksize != "" {
		if tmp, err := strconv.Atoi(setting.Chunksize); err != nil {
			return nil, fmt.Errorf("The chunksize parameter should be a number")
		} else {
			chunksize = uint64(tmp)
		}
	}

	var err error
	var conn *rados.Conn
	if setting.Username != "" {
		conn, err = rados.NewConnWithUser(setting.Username)
	} else {
		conn, err = rados.NewConn()
	}
	if err != nil {
		return nil, err
	}

	if err := conn.ReadDefaultConfigFile(); err != nil {
		return nil, err
	}

	if err := conn.Connect(); err != nil {
		return nil, err
	}

	ioctx, err := conn.OpenIOContext(setting.Poolname)
	if err != nil {
		return nil, err
	}

	return &radosdesc{
		Ioctx:     ioctx,
		Conn:      conn,
		Chunksize: chunksize,
	}, nil
}