Deep rebranding #5

Merged
alexvanin merged 1 commit from rebranding into master 2022-12-30 08:05:21 +00:00
21 changed files with 81 additions and 84 deletions
Showing only changes of commit a7986e7852 - Show all commits

View file

@ -3,8 +3,8 @@
First, thank you for contributing! We love and encourage pull requests from First, thank you for contributing! We love and encourage pull requests from
everyone. Please follow the guidelines: everyone. Please follow the guidelines:
- Check the open [issues](https://github.com/nspcc-dev/xk6-neofs/issues) and - Check the open [issues](https://github.com/TrueCloudLab/xk6-frostfs/issues) and
[pull requests](https://github.com/nspcc-dev/xk6-neofs/pulls) for existing [pull requests](https://github.com/TrueCloudLab/xk6-frostfs/pulls) for existing
discussions. discussions.
- Open an issue first, to discuss a new feature or enhancement. - Open an issue first, to discuss a new feature or enhancement.
@ -23,23 +23,23 @@ everyone. Please follow the guidelines:
## Development Workflow ## Development Workflow
Start by forking the `xk6-neofs` repository, make changes in a branch and then Start by forking the `xk6-frostfs` repository, make changes in a branch and then
send a pull request. We encourage pull requests to discuss code changes. Here send a pull request. We encourage pull requests to discuss code changes. Here
are the steps in details: are the steps in details:
### Set up your GitHub Repository ### Set up your GitHub Repository
Fork [xk6-neofs upstream](https://github.com/nspcc-dev/xk6-neofs/fork) source Fork [xk6-frostfs upstream](https://github.com/TrueCloudLab/xk6-frostfs/fork) source
repository to your own personal repository. Copy the URL of your fork (you will repository to your own personal repository. Copy the URL of your fork (you will
need it for the `git clone` command below). need it for the `git clone` command below).
```sh ```sh
$ git clone https://github.com/nspcc-dev/xk6-neofs $ git clone https://github.com/TrueCloudLab/xk6-frostfs
``` ```
### Set up git remote as ``upstream`` ### Set up git remote as ``upstream``
```sh ```sh
$ cd xk6-neofs $ cd xk6-frostfs
$ git remote add upstream https://github.com/nspcc-dev/xk6-neofs $ git remote add upstream https://github.com/TrueCloudLab/xk6-frostfs
$ git fetch upstream $ git fetch upstream
$ git merge upstream/master $ git merge upstream/master
... ...
@ -106,7 +106,7 @@ contributors".
To sign your work, just add a line like this at the end of your commit message: To sign your work, just add a line like this at the end of your commit message:
``` ```
Signed-off-by: Samii Sakisaka <samii@nspcc.ru> Signed-off-by: Samii Sakisaka <samii@eve-no-jikan.co.jp>
``` ```
This can easily be done with the `--signoff` option to `git commit`. This can easily be done with the `--signoff` option to `git commit`.

View file

@ -1,14 +1,11 @@
<p align="center"> <p align="center">
<img src="./.github/logo.svg" width="500px" alt="NeoFS"> <a href="https://go.k6.io/k6">k6</a> extension to test and benchmark FrostFS related protocols.
</p>
<p align="center">
<a href="https://go.k6.io/k6">k6</a> extension to test and benchmark <a href="https://fs.neo.org">NeoFS</a> related protocols.
</p> </p>
--- ---
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
# xk6-neofs # xk6-frostfs
# Build # Build
@ -24,13 +21,13 @@ go install go.k6.io/xk6/cmd/xk6@latest
2. Clone this repository 2. Clone this repository
```shell ```shell
git clone github.com/nspcc-dev/xk6-neofs git clone github.com/TrueCloudLab/xk6-frostfs
cd xk6-neofs cd xk6-frostfs
``` ```
3. Build the binary: 3. Build the binary:
```shell ```shell
xk6 build --with github.com/nspcc-dev/xk6-neofs=. xk6 build --with github.com/TrueCloudLab/xk6-frostfs=.
``` ```
4. Run k6: 4. Run k6:
@ -43,12 +40,12 @@ xk6 build --with github.com/nspcc-dev/xk6-neofs=.
## Native ## Native
Create native client with `connect` method. Arguments: Create native client with `connect` method. Arguments:
- neofs storage node endpoint - frostfs storage node endpoint
- hex encoded private key (empty value produces random key) - hex encoded private key (empty value produces random key)
```js ```js
import native from 'k6/x/neofs/native'; import native from 'k6/x/frostfs/native';
const neofs_cli = native.connect("s01.neofs.devenv:8080", "") const frostfs_cli = native.connect("s01.frostfs.devenv:8080", "")
``` ```
### Methods ### Methods
@ -62,8 +59,8 @@ const neofs_cli = native.connect("s01.neofs.devenv:8080", "")
boolean flag, `object_id` string, and `error` string. boolean flag, `object_id` string, and `error` string.
- `get(container_id, object_id)`. Returns dictionary with `success` boolean - `get(container_id, object_id)`. Returns dictionary with `success` boolean
flag, and `error` string. flag, and `error` string.
- `onsite(container_id, payload)`. Returns NeoFS object instance with prepared - `onsite(container_id, payload)`. Returns FrostFS object instance with prepared
headers. Invoke `put(headers)` method on this object to upload it into NeoFS. headers. Invoke `put(headers)` method on this object to upload it into FrostFS.
It returns dictionary with `success` boolean flag, `object_id` string and It returns dictionary with `success` boolean flag, `object_id` string and
`error` string. `error` string.
@ -75,14 +72,14 @@ Create s3 client with `connect` method. Arguments:
Credentials are taken from default AWS configuration files and ENVs. Credentials are taken from default AWS configuration files and ENVs.
```js ```js
import s3 from 'k6/x/neofs/s3'; import s3 from 'k6/x/frostfs/s3';
const s3_cli = s3.connect("http://s3.neofs.devenv:8080") const s3_cli = s3.connect("http://s3.frostfs.devenv:8080")
``` ```
You can also provide additional options: You can also provide additional options:
```js ```js
import s3 from 'k6/x/neofs/s3'; import s3 from 'k6/x/frostfs/s3';
const s3_cli = s3.connect("http://s3.neofs.devenv:8080", {'no_verify_ssl': 'true', 'timeout': '60s'}) const s3_cli = s3.connect("http://s3.frostfs.devenv:8080", {'no_verify_ssl': 'true', 'timeout': '60s'})
``` ```
* `no_verify_ss` - Bool. If `true` - skip verifying the s3 certificate chain and host name (useful if s3 uses self-signed certificates) * `no_verify_ss` - Bool. If `true` - skip verifying the s3 certificate chain and host name (useful if s3 uses self-signed certificates)

View file

@ -1,9 +1,9 @@
import {uuidv4} from 'https://jslib.k6.io/k6-utils/1.2.0/index.js'; import {uuidv4} from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';
import {fail} from "k6"; import {fail} from "k6";
import native from 'k6/x/neofs/native'; import native from 'k6/x/frostfs/native';
const payload = open('../go.sum', 'b'); const payload = open('../go.sum', 'b');
const neofs_cli = native.connect("s01.neofs.devenv:8080", "1dd37fba80fec4e6a6f13fd708d8dcb3b29def768017052f6c930fa1c5d90bbb") const frostfs_cli = native.connect("s01.frostfs.devenv:8080", "1dd37fba80fec4e6a6f13fd708d8dcb3b29def768017052f6c930fa1c5d90bbb")
export const options = { export const options = {
stages: [ stages: [
@ -19,7 +19,7 @@ export function setup() {
name_global_scope: 'false' name_global_scope: 'false'
} }
const res = neofs_cli.putContainer(params) const res = frostfs_cli.putContainer(params)
if (!res.success) { if (!res.success) {
fail(res.error) fail(res.error)
} }
@ -31,9 +31,9 @@ export default function (data) {
let headers = { let headers = {
'unique_header': uuidv4() 'unique_header': uuidv4()
} }
let resp = neofs_cli.put(data.container_id, headers, payload) let resp = frostfs_cli.put(data.container_id, headers, payload)
if (resp.success) { if (resp.success) {
neofs_cli.get(data.container_id, resp.object_id) frostfs_cli.get(data.container_id, resp.object_id)
} else { } else {
console.log(resp.error) console.log(resp.error)
} }

View file

@ -1,10 +1,10 @@
import { uuidv4 } from 'https://jslib.k6.io/k6-utils/1.2.0/index.js'; import { uuidv4 } from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';
import native from 'k6/x/neofs/native'; import native from 'k6/x/frostfs/native';
const payload = open('../go.sum', 'b'); const payload = open('../go.sum', 'b');
const container = "AjSxSNNXbJUDPqqKYm1VbFVDGCakbpUNH8aGjPmGAH3B" const container = "AjSxSNNXbJUDPqqKYm1VbFVDGCakbpUNH8aGjPmGAH3B"
const neofs_cli = native.connect("s01.neofs.devenv:8080", "") const frostfs_cli = native.connect("s01.frostfs.devenv:8080", "")
const neofs_obj = neofs_cli.onsite(container, payload) const frostfs_obj = frostfs_cli.onsite(container, payload)
export const options = { export const options = {
stages: [ stages: [
@ -16,9 +16,9 @@ export default function () {
let headers = { let headers = {
'unique_header': uuidv4() 'unique_header': uuidv4()
} }
let resp = neofs_obj.put(headers) let resp = frostfs_obj.put(headers)
if (resp.success) { if (resp.success) {
neofs_cli.get(container, resp.object_id) frostfs_cli.get(container, resp.object_id)
} else { } else {
console.log(resp.error) console.log(resp.error)
} }

View file

@ -1,10 +1,10 @@
import {uuidv4} from 'https://jslib.k6.io/k6-utils/1.2.0/index.js'; import {uuidv4} from 'https://jslib.k6.io/k6-utils/1.2.0/index.js';
import {fail} from 'k6' import {fail} from 'k6'
import s3 from 'k6/x/neofs/s3'; import s3 from 'k6/x/frostfs/s3';
const payload = open('../go.sum', 'b'); const payload = open('../go.sum', 'b');
const bucket = "cats" const bucket = "cats"
const s3_cli = s3.connect("https://s3.neofs.devenv:8080", {'no_verify_ssl': 'true'}) const s3_cli = s3.connect("https://s3.frostfs.devenv:8080", {'no_verify_ssl': 'true'})
export const options = { export const options = {
stages: [ stages: [

View file

@ -1,4 +1,4 @@
package xk6_neofs package xk6_frostfs
import ( import (
_ "github.com/TrueCloudLab/xk6-frostfs/internal/datagen" _ "github.com/TrueCloudLab/xk6-frostfs/internal/datagen"
@ -13,9 +13,9 @@ const (
) )
func init() { func init() {
modules.Register("k6/x/neofs", &NeoFS{Version: version}) modules.Register("k6/x/frostfs", &FrostFS{Version: version})
} }
type NeoFS struct { type FrostFS struct {
Version string Version string
} }

View file

@ -5,7 +5,7 @@ import (
) )
// RootModule is the global module object type. It is instantiated once per test // RootModule is the global module object type. It is instantiated once per test
// run and will be used to create k6/x/neofs/registry module instances for each VU. // run and will be used to create k6/x/frostfs/registry module instances for each VU.
type RootModule struct{} type RootModule struct{}
// Datagen represents an instance of the module for every VU. // Datagen represents an instance of the module for every VU.
@ -20,7 +20,7 @@ var (
) )
func init() { func init() {
modules.Register("k6/x/neofs/datagen", new(RootModule)) modules.Register("k6/x/frostfs/datagen", new(RootModule))
} }
// NewModuleInstance implements the modules.Module interface and returns // NewModuleInstance implements the modules.Module interface and returns

View file

@ -352,7 +352,7 @@ func (c *Client) Onsite(containerID string, payload goja.ArrayBuffer) PreparedOb
// not sure if load test needs object transformation // not sure if load test needs object transformation
// with parent-child relation; if needs, then replace // with parent-child relation; if needs, then replace
// this code with the usage of object transformer from // this code with the usage of object transformer from
// neofs-loader or distribution. // frostfs-loader or distribution.
msg := fmt.Sprintf("payload size %d is bigger than network limit %d", ln, maxObjectSize) msg := fmt.Sprintf("payload size %d is bigger than network limit %d", ln, maxObjectSize)
panic(msg) panic(msg)
} }

View file

@ -6,7 +6,7 @@ import (
"time" "time"
"github.com/TrueCloudLab/frostfs-sdk-go/client" "github.com/TrueCloudLab/frostfs-sdk-go/client"
neofsecdsa "github.com/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" frostfsecdsa "github.com/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
"github.com/TrueCloudLab/frostfs-sdk-go/session" "github.com/TrueCloudLab/frostfs-sdk-go/session"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/crypto/keys"
@ -15,7 +15,7 @@ import (
) )
// RootModule is the global module object type. It is instantiated once per test // RootModule is the global module object type. It is instantiated once per test
// run and will be used to create k6/x/neofs/native module instances for each VU. // run and will be used to create k6/x/frostfs/native module instances for each VU.
type RootModule struct{} type RootModule struct{}
// Native represents an instance of the module for every VU. // Native represents an instance of the module for every VU.
@ -35,7 +35,7 @@ var (
) )
func init() { func init() {
modules.Register("k6/x/neofs/native", new(RootModule)) modules.Register("k6/x/frostfs/native", new(RootModule))
} }
// NewModuleInstance implements the modules.Module interface and returns // NewModuleInstance implements the modules.Module interface and returns
@ -97,7 +97,7 @@ func (n *Native) Connect(endpoint, hexPrivateKey string, dialTimeout, streamTime
return nil, fmt.Errorf("session token: %w", err) return nil, fmt.Errorf("session token: %w", err)
} }
var key neofsecdsa.PublicKey var key frostfsecdsa.PublicKey
err = key.Decode(sessionResp.PublicKey()) err = key.Decode(sessionResp.PublicKey())
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid public session key: %w", err) return nil, fmt.Errorf("invalid public session key: %w", err)
@ -111,21 +111,21 @@ func (n *Native) Connect(endpoint, hexPrivateKey string, dialTimeout, streamTime
// register metrics // register metrics
registry := metrics.NewRegistry() registry := metrics.NewRegistry()
objPutTotal, _ = registry.NewMetric("neofs_obj_put_total", metrics.Counter) objPutTotal, _ = registry.NewMetric("frostfs_obj_put_total", metrics.Counter)
objPutFails, _ = registry.NewMetric("neofs_obj_put_fails", metrics.Counter) objPutFails, _ = registry.NewMetric("frostfs_obj_put_fails", metrics.Counter)
objPutDuration, _ = registry.NewMetric("neofs_obj_put_duration", metrics.Trend, metrics.Time) objPutDuration, _ = registry.NewMetric("frostfs_obj_put_duration", metrics.Trend, metrics.Time)
objGetTotal, _ = registry.NewMetric("neofs_obj_get_total", metrics.Counter) objGetTotal, _ = registry.NewMetric("frostfs_obj_get_total", metrics.Counter)
objGetFails, _ = registry.NewMetric("neofs_obj_get_fails", metrics.Counter) objGetFails, _ = registry.NewMetric("frostfs_obj_get_fails", metrics.Counter)
objGetDuration, _ = registry.NewMetric("neofs_obj_get_duration", metrics.Trend, metrics.Time) objGetDuration, _ = registry.NewMetric("frostfs_obj_get_duration", metrics.Trend, metrics.Time)
objDeleteTotal, _ = registry.NewMetric("neofs_obj_delete_total", metrics.Counter) objDeleteTotal, _ = registry.NewMetric("frostfs_obj_delete_total", metrics.Counter)
objDeleteFails, _ = registry.NewMetric("neofs_obj_delete_fails", metrics.Counter) objDeleteFails, _ = registry.NewMetric("frostfs_obj_delete_fails", metrics.Counter)
objDeleteDuration, _ = registry.NewMetric("neofs_obj_delete_duration", metrics.Trend, metrics.Time) objDeleteDuration, _ = registry.NewMetric("frostfs_obj_delete_duration", metrics.Trend, metrics.Time)
cnrPutTotal, _ = registry.NewMetric("neofs_cnr_put_total", metrics.Counter) cnrPutTotal, _ = registry.NewMetric("frostfs_cnr_put_total", metrics.Counter)
cnrPutFails, _ = registry.NewMetric("neofs_cnr_put_fails", metrics.Counter) cnrPutFails, _ = registry.NewMetric("frostfs_cnr_put_fails", metrics.Counter)
cnrPutDuration, _ = registry.NewMetric("neofs_cnr_put_duration", metrics.Trend, metrics.Time) cnrPutDuration, _ = registry.NewMetric("frostfs_cnr_put_duration", metrics.Trend, metrics.Time)
return &Client{ return &Client{
vu: n.vu, vu: n.vu,

View file

@ -24,7 +24,7 @@ const (
const bucketName = "_object" const bucketName = "_object"
// ObjectInfo represents information about neoFS object that has been created // ObjectInfo represents information about FrostFS object that has been created
// via gRPC/HTTP/S3 API. // via gRPC/HTTP/S3 API.
type ObjectInfo struct { type ObjectInfo struct {
Id uint64 // Identifier in bolt DB Id uint64 // Identifier in bolt DB

View file

@ -10,7 +10,7 @@ import (
) )
// RootModule is the global module object type. It is instantiated once per test // RootModule is the global module object type. It is instantiated once per test
// run and will be used to create k6/x/neofs/registry module instances for each VU. // run and will be used to create k6/x/frostfs/registry module instances for each VU.
type RootModule struct { type RootModule struct {
// Stores object registry by path of database file. We should have only single instance // Stores object registry by path of database file. We should have only single instance
// of registry per each file // of registry per each file
@ -38,7 +38,7 @@ func init() {
registries: make(map[string]*ObjRegistry), registries: make(map[string]*ObjRegistry),
selectors: make(map[string]*ObjSelector), selectors: make(map[string]*ObjSelector),
} }
modules.Register("k6/x/neofs/registry", rootModule) modules.Register("k6/x/frostfs/registry", rootModule)
} }
// NewModuleInstance implements the modules.Module interface and returns // NewModuleInstance implements the modules.Module interface and returns

View file

@ -15,7 +15,7 @@ import (
) )
// RootModule is the global module object type. It is instantiated once per test // RootModule is the global module object type. It is instantiated once per test
// run and will be used to create k6/x/neofs/s3 module instances for each VU. // run and will be used to create k6/x/frostfs/s3 module instances for each VU.
type RootModule struct{} type RootModule struct{}
// S3 represents an instance of the module for every VU. // S3 represents an instance of the module for every VU.
@ -35,7 +35,7 @@ var (
) )
func init() { func init() {
modules.Register("k6/x/neofs/s3", new(RootModule)) modules.Register("k6/x/frostfs/s3", new(RootModule))
} }
// NewModuleInstance implements the modules.Module interface and returns // NewModuleInstance implements the modules.Module interface and returns

View file

@ -1,6 +1,6 @@
import datagen from 'k6/x/neofs/datagen'; import datagen from 'k6/x/frostfs/datagen';
import native from 'k6/x/neofs/native'; import native from 'k6/x/frostfs/native';
import registry from 'k6/x/neofs/registry'; import registry from 'k6/x/frostfs/registry';
import { SharedArray } from 'k6/data'; import { SharedArray } from 'k6/data';
import { sleep } from 'k6'; import { sleep } from 'k6';

View file

@ -1,5 +1,5 @@
import datagen from 'k6/x/neofs/datagen'; import datagen from 'k6/x/frostfs/datagen';
import registry from 'k6/x/neofs/registry'; import registry from 'k6/x/frostfs/registry';
import http from 'k6/http'; import http from 'k6/http';
import { SharedArray } from 'k6/data'; import { SharedArray } from 'k6/data';
import { sleep } from 'k6'; import { sleep } from 'k6';

View file

@ -3,7 +3,7 @@
import argparse import argparse
import json import json
from helpers.neofs_cli import get_object from helpers.frostfs_cli import get_object
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--endpoint', help='Node address') parser.add_argument('--endpoint', help='Node address')

View file

@ -8,7 +8,7 @@ from collections import Counter
from concurrent.futures import ProcessPoolExecutor from concurrent.futures import ProcessPoolExecutor
from helpers.cmd import ProgressBar from helpers.cmd import ProgressBar
from helpers.neofs_cli import search_object_by_id from helpers.frostfs_cli import search_object_by_id
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--endpoints', help='Node address') parser.add_argument('--endpoints', help='Node address')

View file

@ -4,7 +4,7 @@ from helpers.cmd import execute_cmd
def create_container(endpoint, policy, wallet_file, wallet_config): def create_container(endpoint, policy, wallet_file, wallet_config):
cmd_line = f"neofs-cli --rpc-endpoint {endpoint} container create --wallet {wallet_file} --config {wallet_config} " \ cmd_line = f"frostfs-cli --rpc-endpoint {endpoint} container create --wallet {wallet_file} --config {wallet_config} " \
f" --policy '{policy}' --basic-acl public-read-write --await" f" --policy '{policy}' --basic-acl public-read-write --await"
output, success = execute_cmd(cmd_line) output, success = execute_cmd(cmd_line)
@ -29,7 +29,7 @@ def create_container(endpoint, policy, wallet_file, wallet_config):
def upload_object(container, payload_filepath, endpoint, wallet_file, wallet_config): def upload_object(container, payload_filepath, endpoint, wallet_file, wallet_config):
object_name = "" object_name = ""
cmd_line = f"neofs-cli --rpc-endpoint {endpoint} object put --file {payload_filepath} --wallet {wallet_file} --config {wallet_config} " \ cmd_line = f"frostfs-cli --rpc-endpoint {endpoint} object put --file {payload_filepath} --wallet {wallet_file} --config {wallet_config} " \
f"--cid {container} --no-progress" f"--cid {container} --no-progress"
output, success = execute_cmd(cmd_line) output, success = execute_cmd(cmd_line)
@ -50,7 +50,7 @@ def upload_object(container, payload_filepath, endpoint, wallet_file, wallet_con
def get_object(cid, oid, endpoint, out_filepath, wallet_file, wallet_config): def get_object(cid, oid, endpoint, out_filepath, wallet_file, wallet_config):
cmd_line = f"neofs-cli object get -r {endpoint} --cid {cid} --oid {oid} --wallet {wallet_file} --config {wallet_config} " \ cmd_line = f"frostfs-cli object get -r {endpoint} --cid {cid} --oid {oid} --wallet {wallet_file} --config {wallet_config} " \
f"--file {out_filepath}" f"--file {out_filepath}"
output, success = execute_cmd(cmd_line) output, success = execute_cmd(cmd_line)
@ -64,7 +64,7 @@ def get_object(cid, oid, endpoint, out_filepath, wallet_file, wallet_config):
def search_object_by_id(cid, oid, endpoint, wallet_file, wallet_config, ttl=2): def search_object_by_id(cid, oid, endpoint, wallet_file, wallet_config, ttl=2):
cmd_line = f"neofs-cli object search --ttl {ttl} -r {endpoint} --cid {cid} --oid {oid} --wallet {wallet_file} --config {wallet_config} " cmd_line = f"frostfs-cli object search --ttl {ttl} -r {endpoint} --cid {cid} --oid {oid} --wallet {wallet_file} --config {wallet_config} "
output, success = execute_cmd(cmd_line) output, success = execute_cmd(cmd_line)

View file

@ -8,7 +8,7 @@ from argparse import Namespace
from concurrent.futures import ProcessPoolExecutor from concurrent.futures import ProcessPoolExecutor
from helpers.cmd import random_payload from helpers.cmd import random_payload
from helpers.neofs_cli import create_container, upload_object from helpers.frostfs_cli import create_container, upload_object
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('--size', help='Upload objects size in kb') parser.add_argument('--size', help='Upload objects size in kb')

View file

@ -35,7 +35,7 @@ $ ./k6 run -e DURATION=60 -e WRITE_OBJ_SIZE=8192 -e READERS=20 -e WRITERS=20 -e
``` ```
Options (in addition to the common options): Options (in addition to the common options):
* `GRPC_ENDPOINTS` - GRPC endpoints of neoFS in format `host:port`. To specify multiple endpoints separate them by comma. * `GRPC_ENDPOINTS` - GRPC endpoints of FrostFS storage in format `host:port`. To specify multiple endpoints separate them by comma.
* `DELETERS` - number of VUs performing delete operations (using deleters requires that options `DELETE_AGE` and `REGISTRY_FILE` are specified as well). * `DELETERS` - number of VUs performing delete operations (using deleters requires that options `DELETE_AGE` and `REGISTRY_FILE` are specified as well).
* `DELETE_AGE` - age of object in seconds before which it can not be deleted. This parameter can be used to control how many objects we have in the system under load. * `DELETE_AGE` - age of object in seconds before which it can not be deleted. This parameter can be used to control how many objects we have in the system under load.
* `SLEEP_DELETE` - time interval (in seconds) between deleting VU iterations. * `SLEEP_DELETE` - time interval (in seconds) between deleting VU iterations.
@ -63,7 +63,7 @@ Options (in addition to the common options):
1. Create s3 credentials: 1. Create s3 credentials:
```shell ```shell
$ neofs-s3-authmate issue-secret --wallet wallet.json --peer host1:8080 --gate-public-key 03d33a2cc7b8daaa5a3df3fccf065f7cf1fc6a3279efc161fcec512dcc0c1b2277 --gate-public-key 03ff0ad212e10683234442530bfd71d0bb18c3fbd6459aba768eacf158b0c359a2 --gate-public-key 033ae03ff30ed3b6665af69955562cfc0eae18d50e798ab31f054ee22e32fee993 --gate-public-key 02127c7498de0765d2461577c9d4f13f916eefd1884896183e6de0d9a85d17f2fb --bearer-rules rules.json --container-placement-policy "REP 1 IN X CBF 1 SELECT 1 FROM * AS X" --container-policy ./scenarios/files/policy.json $ frostfs-s3-authmate issue-secret --wallet wallet.json --peer host1:8080 --gate-public-key 03d33a2cc7b8daaa5a3df3fccf065f7cf1fc6a3279efc161fcec512dcc0c1b2277 --gate-public-key 03ff0ad212e10683234442530bfd71d0bb18c3fbd6459aba768eacf158b0c359a2 --gate-public-key 033ae03ff30ed3b6665af69955562cfc0eae18d50e798ab31f054ee22e32fee993 --gate-public-key 02127c7498de0765d2461577c9d4f13f916eefd1884896183e6de0d9a85d17f2fb --bearer-rules rules.json --container-placement-policy "REP 1 IN X CBF 1 SELECT 1 FROM * AS X" --container-policy ./scenarios/files/policy.json
Enter password for wallet.json > Enter password for wallet.json >
{ {

View file

@ -1,6 +1,6 @@
import datagen from 'k6/x/neofs/datagen'; import datagen from 'k6/x/frostfs/datagen';
import registry from 'k6/x/neofs/registry'; import registry from 'k6/x/frostfs/registry';
import s3 from 'k6/x/neofs/s3'; import s3 from 'k6/x/frostfs/s3';
import { SharedArray } from 'k6/data'; import { SharedArray } from 'k6/data';
import { sleep } from 'k6'; import { sleep } from 'k6';

View file

@ -1,6 +1,6 @@
import native from 'k6/x/neofs/native'; import native from 'k6/x/frostfs/native';
import registry from 'k6/x/neofs/registry'; import registry from 'k6/x/frostfs/registry';
import s3 from 'k6/x/neofs/s3'; import s3 from 'k6/x/frostfs/s3';
import { sleep } from 'k6'; import { sleep } from 'k6';
import { Counter } from 'k6/metrics'; import { Counter } from 'k6/metrics';