こたつ&&みかん&&でーたべーす

DB 関連の話を中心に技術っぽい記事を書きます。

kubectl wait コマンドの --for=condition=XXXX に指定できる値を調べる

お仕事で同僚のエンジニアから kubectl wait--for=condition=XXXX に指定できる値 (condition の種類) ってどこで確認できるの?的な質問をもらったのですが、自分も知らなかったので調べてみました。

先に結論

kubernetes/pkg/apis/ 配下の各 API (coreapps 等) のディレクトリ配下にある types.go というファイルで Condition の名前 (種類) が定義されているようです。

全てのリソースを確認した訳ではありませんが、例えば以下のような感じで各リソースの Condition が定義されているっぽいことが確認できました。

いろいろ調査

先に結論を書きましたが、自分用の備忘録も兼ねて調査の過程を残しておきます。興味がある方はご覧ください。

環境

今回は Kubernetes v1.26 をベースに調べました。

とりあえず --help を確認

まずは kubectl wait コマンドの help を見てみたのですが、「condition-name を指定する」と書いてあるのみで、この condition-name に「どのような値を指定できるのか」という情報は見当たりませんでした。

$ kubectl wait --help

(snip)

Options:

    (snip)

    --for='':
        The condition to wait on: [delete|condition=condition-name[=condition-value]|jsonpath='{JSONPath
        expression}'=JSONPath Condition]. The default condition-value is true.  Condition values are compared after
        Unicode simple case folding, which is a more general form of case-insensitivity.

kubectl wait のドキュメントを確認

kubectl wait--help では分からなかったので、Kubernetes の公式ドキュメント Kubectl Reference Docs を調べてみました。

しかし、こちらの --for の説明も以下のようになっており、「どのような値を指定できるのか」という情報は見当たりませんでした。

The condition to wait on: [delete|condition=condition-name]. The default status value of condition-name is true, you can set false with condition=condition-name=false

雑にググってみる

--help やリファレンスマニュアルでは情報が見つからなかったので、それっぽいキーワードでググってみたところ、Kubernetes の公式ドキュメント Pod Lifecycle に「Pod の Condition の一覧」が記載されていました。しかし、Deployment 等の 「Pod 以外のリソース」の Condition の一覧のような情報が記載されたドキュメントは (私が探した範囲では) なさそうでした。

また、上記 Pod Lifecycle を見ると、Pod の Condition は PodCondition という構造体で定義されているっぽいことが確認できました。

PodCondition から情報を探る

前述した Pod Lifecycle を見ると type の説明が "Name of this Pod condition." となっており、どうやらこの type の値が Condition の名前になっているようです。また、PodCondition 側の type の説明にも "Type is the type of the condition." と記載されていました。

そこで、このあたりから「Kubernetes のリソースの Condition の名前 (種類) がどこで定義されているか」を探ってみました。

この PodCondition は "Appears In: PodStatus [core/v1]" となっています。さらに、PodStatus は "Appears In: Pod [core/v1]" となっています。

ということで、Pod の Condition の値 (名前?) は Pod -> PodStatus -> PodCondition -> type で定義されていそう、ということがわかりました。

kubectl explain から情報を探る

なんとなく type (Condition の名前) が定義されていそうな場所が分かったので、kubectl explain コマンドで対応していそうなフィールドを探してみました。

まず、kubectl explain pod を実行すると pod.status というフィールドがあることが確認できました。

$ kubectl explain pod

(snip)

FIELDS:

   (snip)

   status       <Object>
     Most recently observed status of the pod. This data may not be up to date.
     Populated by the system. Read-only. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

次に、kubectl explain pod.status を実行すると pod.status.conditions というそれっぽい感じのフィールドが見つかりました。

$ kubectl explain pod.status

(snip)

FIELDS:
   conditions   <[]Object>
     Current service state of pod. More info:
     https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions

さらに、kubectl explain pod.status.conditions を実行してみると、pod.status.conditions.type というフィールドがありました。

$ kubectl explain pod.status.conditions

(snip)

FIELDS:

   (snip)

   type <string> -required-
     Type is the type of the condition. More info:
     https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions

最後に kubectl explain pod.status.conditions.type を実行すると、最初にググった際に見つかったドキュメントへの URL (Pod の Condition の一覧が記載されていたドキュメントの URL) が記載されていました。どうやら、この pod.status.conditions.type で Condition の名前 (種類) が定義されている、ということで間違いなさそうです。

$ kubectl explain pod.status.conditions.type
KIND:     Pod
VERSION:  v1

FIELD:    type <string>

DESCRIPTION:
     Type is the type of the condition. More info:
     https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions

他のリソースについても kubectl explain から情報を探ってみる

Pod の場合は pod.status.conditions.type で Condition の名前 (種類) が定義されていそうな感じだったので、試しに他のリソースについても同じフィールド (xxxx.status.conditions.type) が存在しているか確認してみました。すると、(全てのリソースを確認した訳ではないですが) 他のリソースにも同様のフィールドが存在しているようでした。

$ kubectl explain node.status.conditions.type
KIND:     Node
VERSION:  v1

FIELD:    type <string>

DESCRIPTION:
     Type of node condition.
$ kubectl explain deployment.status.conditions.type
KIND:     Deployment
VERSION:  apps/v1

FIELD:    type <string>

DESCRIPTION:
     Type of deployment condition.
$ kubectl explain replicaset.status.conditions.type
KIND:     ReplicaSet
VERSION:  apps/v1

FIELD:    type <string>

DESCRIPTION:
     Type of replica set condition.

しかし、どのリソースの DESCRIPTION にも "Type of XXXX condition." としか記載されておらず、具体的な Condition の名前 (種類) は確認できませんでした... (´・ω・`)

ソースコードを調べる

ドキュメントや kubectl explain コマンドではこれ以上詳細な情報が得られそうになかったので、ソースコードを調べました。ドキュメントから PodCondition という構造体が存在していそうなことが確認できていたので、この PodCondition というキーワードでソースコード内を検索したところ、以下の構造体が見つかりました。

https://github.com/kubernetes/kubernetes/blob/v1.26.4/pkg/apis/core/types.go#L2485-L2497

// PodCondition represents pod's condition
type PodCondition struct {
    Type   PodConditionType
    Status ConditionStatus
    // +optional
    LastProbeTime metav1.Time
    // +optional
    LastTransitionTime metav1.Time
    // +optional
    Reason string
    // +optional
    Message string
}

TypePodConditionType 型になっているようなので、この PodConditionType の定義を探してみると、すぐ隣に以下のような定義がありました。

https://github.com/kubernetes/kubernetes/blob/v1.26.4/pkg/apis/core/types.go#L2460-L2483

// PodConditionType defines the condition of pod
type PodConditionType string

// These are valid conditions of pod.
const (
    // PodScheduled represents status of the scheduling process for this pod.
    PodScheduled PodConditionType = "PodScheduled"
    // PodReady means the pod is able to service requests and should be added to the
    // load balancing pools of all matching services.
    PodReady PodConditionType = "Ready"
    // PodInitialized means that all init containers in the pod have started successfully.
    PodInitialized PodConditionType = "Initialized"
    // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler
    // can't schedule the pod right now, for example due to insufficient resources in the cluster.
    PodReasonUnschedulable = "Unschedulable"
    // PodReasonSchedulingGated reason in PodScheduled PodCondition means that the scheduler
    // skips scheduling the pod because one or more scheduling gates are still present.
    PodReasonSchedulingGated = "SchedulingGated"
    // ContainersReady indicates whether all containers in the pod are ready.
    ContainersReady PodConditionType = "ContainersReady"
    // DisruptionTarget indicates the pod is about to be terminated due to a
    // disruption (such as preemption, eviction API or garbage-collection).
    DisruptionTarget PodConditionType = "DisruptionTarget"
)

kubectl explain pod.status.conditions を実行した際に表示されていたドキュメント Pod conditions に記載されている Condition の内容ともだいたい一致しているようなので、Condition の名前 (種類) はここで定義されているようです。

ただ、ドキュメント Pod conditions とこのソースコード上の定義は厳密には合致していないようです... もしかしたらバージョンの違い (「ドキュメントが前提にしているバージョン」と「確認したソースコードのバージョン」が違う?) 等による差異があるのかもしれませんが、これ以上の詳細はよくわかりませんでした...

まとめ

ということで、kubectl wait--for=condition=XXXX に指定できる値を知るために、Kubernetes の各リソースの Condition がどこで定義されているかを探してみました。

再掲になりますが、kubernetes/pkg/apis/ 配下の各 API (coreapps 等) のディレクトリ配下にある types.go というファイルで Condition の名前 (種類) が定義されているようです。

最近、稀に Kubernetesソースコードを読むことがあるのですが、Kubernetes はコードの量が膨大でやばいですね (語彙力)。

同一ホスト上の 2つの minikube 間で通信できるようにしたい

タイトルにも記載していますが、お仕事で以下のような検証を実施したいというお話がありました。

  • マルチ Kubernetes cluster 構成での検証を実施したい
  • Kubernetes cluster 間で通信できるようにしたい
  • ローカルの端末上で minikube を使ってお手軽に検証できるようにしたい (minikube に慣れてるので minikube でやりたい)

いろいろ模索してみた結果、先週リリースされた minikube v1.29.0 で追加されている --static-ip を使うといい感じにできそうだったので、検証結果を備忘録として残します。

環境

今回は以下の環境/バージョンで検証しています。

概要

minikube の docker driver を使って以下のような構成の環境を構築しました。同一の Docker Network 上に 2つの minikube をコンテナとして起動するので、この 2つのコンテナ間で通信ができるようになります。

  +--------------+    +--------------+
  |  minikube-1  |    |  minikube-2  |
  | (172.25.0.2) |    | (172.25.0.3) |
  +------+-------+    +------+-------+
         |                   |
*--------+-------------------+---------* (Docker network: test-net)

環境構築

まず、Docker Network test-net を作成します。subnet の値はお好みに合わせて適当なプライベートアドレスの範囲を指定します。

$ docker network create -d bridge test-net --subnet=172.25.0.0/24 --gateway=172.25.0.1

次に minikube-1test-net 上に作成します。この時 --static-ipminikube-1 のコンテナに割り当てられる IP 172.25.0.2 を明示的に指定します。

$ minikube start -p minikube-1 --network=test-net --driver=docker --static-ip=172.25.0.2

同様に、minikube-2test-net 上に作成します。こちらも同様に --static-ipminikube-2 のコンテナに割り当てられる IP 172.25.0.3 を指定します。

$ minikube start -p minikube-2 --network=test-net --driver=docker --static-ip=172.25.0.3

これで、以下のような感じの環境が構築できました。

$ docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS                                                                                                                                  NAMES
e288888db363   gcr.io/k8s-minikube/kicbase:v0.0.37   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:32787->22/tcp, 127.0.0.1:32786->2376/tcp, 127.0.0.1:32785->5000/tcp, 127.0.0.1:32784->8443/tcp, 127.0.0.1:32783->32443/tcp   minikube-2
232e4710da78   gcr.io/k8s-minikube/kicbase:v0.0.37   "/usr/local/bin/entr…"   4 minutes ago   Up 4 minutes   127.0.0.1:32782->22/tcp, 127.0.0.1:32781->2376/tcp, 127.0.0.1:32780->5000/tcp, 127.0.0.1:32779->8443/tcp, 127.0.0.1:32778->32443/tcp   minikube-1

test-net 上に作成した 2つの minikube コンテナに、--static-ip で指定した IP がそれぞれ割り当てられていることが確認できます。

$ docker network inspect test-net | jq .[].Containers
{
  "232e4710da782e1dcf7bde6254c738f66ccdcf7b461c8e4ca168fd53b4bcb9a9": {
    "Name": "minikube-1",
    "EndpointID": "5a7c80d74ded5d850277ea72a0cea1db869a7811ba5f72b0737581bdf4a82889",
    "MacAddress": "02:42:ac:19:00:02",
    "IPv4Address": "172.25.0.2/24",
    "IPv6Address": ""
  },
  "e288888db363fb7e982914f4f887281ece739718e7e9fa151c290d17551d666b": {
    "Name": "minikube-2",
    "EndpointID": "d662015b22ef9df77065d77ad0406c41ba0942e0365caa8c694924f2ab21af79",
    "MacAddress": "02:42:ac:19:00:03",
    "IPv4Address": "172.25.0.3/24",
    "IPv6Address": ""
  }
}
$ minikube ip -p minikube-1
172.25.0.2
$ minikube ip -p minikube-2
172.25.0.3

動作確認

動作確認のために、minikube-1 上に NGINX の Pod と Service (type: NodePort) をデプロイし、minikube-2 上の Pod から HTTP リクエストが実行可能かを確認してみます。

まず、minikube-1 上に以下のマニフェストを使って NGINX の Pod と Service をデプロイします。Service の .spec.ports.nodePort には 30080 を指定しておきます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
    protocol: TCP
  selector:
    run: my-nginx
$ minikube profile minikube-1
$ kubectl apply -f ./nginx.yaml
$ kubectl get pod,svc
NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-754c4d44b4-cwq6h   1/1     Running   0          56s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        6m12s
service/my-nginx     NodePort    10.96.223.147   <none>        80:30080/TCP   56s

次に、minikube-2 上にクライアント用の Pod (curl を実行する Pod) を作成します。

$ minikube profile minikube-2
$ kubectl run client --image=yauritux/busybox-curl:latest -it --rm -- /bin/sh

作成した「minikube-2 上にあるクライアント用の Pod」から「minikube-1 上にある NGINX Pod」に (type: NodePort の Service を経由して) HTTP リクエストを実行してみます。minikube-1 の IP 172.25.0.230080 port を指定します。

/home # curl -IXGET http://172.25.0.2:30080/
HTTP/1.1 200 OK
Server: nginx/1.23.3
Date: Thu, 02 Feb 2023 10:25:41 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT
Connection: keep-alive
ETag: "6398a011-267"
Accept-Ranges: bytes

上記の通り、「minikube-2 上の Pod」から「minikube-1 上の NGINX Pod」に対して HTTP リクエストを実行できました。

また、Docker 側の機能でいい感じにコンテナ名の名前解決を実施してくれるので、IP ではなく minikube-1 をホスト名として指定しても HTTP リクエストを実行可能です。

/home # curl -IXGET http://minikube-1:30080/
HTTP/1.1 200 OK
Server: nginx/1.23.3
Date: Thu, 02 Feb 2023 10:27:47 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 13 Dec 2022 15:53:53 GMT
Connection: keep-alive
ETag: "6398a011-267"
Accept-Ranges: bytes

おまけ

--static-ip を指定せずに 2つの minikube を起動しようとすると、IP がコンフリクトして以下のようなエラーが発生しました。そのため、--static-ip が利用できない minikube v1.28.0 以前のバージョンでは上記方法 (同一 Docker Network 上に 2つの minikube を作成) は利用できないと思われます。

$ minikube start -p minikube-2 --network=test-net --driver=docker
😄  [minikube-2] minikube v1.29.0 on Ubuntu 20.04
✨  Using the docker driver based on user configuration
📌  Using Docker driver with root privileges
👍  Starting control plane node minikube-2 in cluster minikube-2
🚜  Pulling base image ...
🔥  Creating docker container (CPUs=2, Memory=6300MB) ...

❌  Exiting due to GUEST_PROVISION: Failed to start host: can't create with that IP, address already in use

╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    😿  If the above advice does not help, please let us know:                             │
│    👉  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯

まとめ

minikube v1.29.0 で追加された --static-ip を使うと、複数の minikube を 1つの Docker Network 上に (IP をコンフリクトさせることなく) 作成できました。ひとまず type: NodePort で通信できるようにはなったので最低限の検証はできるのですが、NodePort ではデフォルトだと 30000-32767 の範囲の番号の port を使う感じになるので、できれば type: LoadBalancer とかでも Kubernetes 間の通信ができるようになると嬉しい気がします。

わりと手探りで模索した感じなので、他に良い方法を知ってる方がいたらコメントいただけると嬉しいです。

ScalarDB を使って Cassandra の Partition を跨いだ Tx を実行してみる

先日 NewSQL/分散SQLデータベース よろず勉強会 #1 にて「Cassandra で Partition を跨いだ Tx を実行できるようにする Accord というものが開発中である」というお話を聞いたのですが、「それって ScalarDB でもできるのでは?」ということでやってみました。

注意

このブログの内容は、あくまで個人の趣味の範囲で ScalarDB を使った検証を実施しているだけですので、あしからず。

また、サンプルとして記載しているコードではエラーハンドリング (エラー発生時の ROLLBACK 等) は考慮していません。実際に ScalarDB を使ってアプリを作る場合はそのあたりも考えないといけないので注意してください。ScalarDB でのエラーハンドリングについては Handle Exceptions に記載されているので、興味がある方はそちらもどうぞ。

環境

今回は以下の環境/バージョンで検証しています。

  • Ubuntu : 20.04 (WSL2)
  • OpenJDK : 17
  • Docker : 20.10.21
  • ScalarDB : 3.7.0

検証内容概要

以下のような感じで、ScalarDB を使って Cassandra 上の (複数パーティションを跨いだ) レコードを更新します。

+----------------------+
|       Java App       |
| +------------------+ |                                +-------------+
| |    Scalar DB     |--------------------------------->| Backend DB  |
| +------------------+ |                                | (Cassandra) |
+----------------------+                                +-------------+

検証

それでは早速検証してみます。

Cassandra 起動

Docker を使って Cassandra を起動します。localhost でアクセスするために -p 9042:9042 オプションを付けておきます。

$ docker run -d --name cassandra -p 9042:9042 cassandra:3.11.14
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                                                                          NAMES
196d8d087453   cassandra:3.11.14   "docker-entrypoint.s…"   23 seconds ago   Up 22 seconds   7000-7001/tcp, 7199/tcp, 9160/tcp, 0.0.0.0:9042->9042/tcp, :::9042->9042/tcp   cassandra

テーブル作成

今回は以下のようなテーブル foo をネームスペース ns 上に作成します。(実際に Cassandra 上に作成されるテーブルには ScalarDB 用のメタデータを格納するカラムも含まれます。)

+---------------------+------+
| columnName          | type |
+---------------------+------+
| pk (Partition Key)  | INT  |
| ck (Clustering Key) | INT  |
| v                   | INT  |
+---------------------+------+

上記のようなテーブルを、ScalarDB の Administrative API を使って作成します。具体的なコードは以下の通りです。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransactionAdmin;
import com.scalar.db.api.TableMetadata;
import com.scalar.db.io.DataType;
import com.scalar.db.service.TransactionFactory;
import com.scalar.db.api.Scan;

public class CreateSchemaOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionAdmin admin = transactionFactory.getTransactionAdmin();

        boolean ifNotExist = true;
        // Create coordinator tables for ScalarDB
        admin.createCoordinatorTables(ifNotExist);
        // Create namespace
        admin.createNamespace("ns", ifNotExist);

        // Define a table metadata
        TableMetadata tableMetadata =
            TableMetadata.newBuilder()
                .addColumn("pk", DataType.INT)
                .addColumn("ck", DataType.TEXT)
                .addColumn("v", DataType.BIGINT)
                .addPartitionKey("pk")
                .addClusteringKey("ck", Scan.Ordering.Order.ASC)
                .build();

        // Create table
        admin.createTable("ns", "foo", tableMetadata, ifNotExist);

        admin.close();
    }
}

Cassandra に cqlsh で接続し、作成されたテーブルの情報を直接参照すると以下のようになっています。ScalarDB 関連のメタデータを含むカラムも併せて定義されていますが、pk が Partition Key、ck が Clustering Key として定義されていることが確認できます。

$ docker exec -it cassandra cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.14 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>
cqlsh> DESCRIBE TABLE ns.foo;

CREATE TABLE ns.foo (
    pk int,
    ck int,
    before_tx_committed_at bigint,
    before_tx_id text,
    before_tx_prepared_at bigint,
    before_tx_state int,
    before_tx_version int,
    before_v int,
    tx_committed_at bigint,
    tx_id text,
    tx_prepared_at bigint,
    tx_state int,
    tx_version int,
    v int,
    PRIMARY KEY (pk, ck)
) WITH CLUSTERING ORDER BY (ck ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

cqlsh>

初期データの INSERT

検証用に以下のようなレコード (Partition Key が異なるレコード) を 2つ INSERT します。

+----+----+---+
| pk | ck | v |
+----+----+---+
| 1  | 1  | 1 |
| 2  | 2  | 2 |
+----+----+---+

上記のようなデータを、ScalarDB の Transactional API を使って INSERT します (ScalarDB の API としては Put を使います)。具体的なコードは以下の通りです。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Put;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class InsertRecordOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionManager manager = transactionFactory.getTransactionManager();

        // Begin Tx
        DistributedTransaction transaction = manager.begin();

        // INSERT INTO ns.foo (pk, ck, v) VALUES (1, 1, 1)
        Key partitionKey1 = Key.ofInt("pk", 1);
        Key clusteringKey1 = Key.ofInt("ck", 1);

        Put put1 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .intValue("v", 1)
                .build();

        transaction.put(put1);

        // INSERT INTO ns.foo (pk, ck, v) VALUES (2, 2, 2)
        Key partitionKey2 = Key.ofInt("pk", 2);
        Key clusteringKey2 = Key.ofInt("ck", 2);

        Put put2 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .intValue("v", 2)
                .build();

        transaction.put(put2);

        // Commit Tx
        transaction.commit();

        manager.close();
    }
}

Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認しておきます。Partition が異なる (Partition Key が異なる) レコードが 2つ INSERT されていることが確認できます。

cqlsh> SELECT pk, ck, v FROM ns.foo;

 pk | ck | v
----+----+---
  1 |  1 | 1
  2 |  2 | 2

(2 rows)

実は、この時点でこの 2つのレコード (Partition が異なるレコード) は ScalarDB の Tx (同一の Tx) で INSERT されています。ScalarDB は Tx 用のメタデータをレコード内に保持する仕組みになっているため、Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) 2つのレコードが INSERT されている」ことが確認できます。

cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo;

 pk | ck | v | tx_id
----+----+---+--------------------------------------
  1 |  1 | 1 | 53da60ca-5879-4e85-88d2-a7580d68e820
  2 |  2 | 2 | 53da60ca-5879-4e85-88d2-a7580d68e820

(2 rows)

Partition を跨いだレコードの UPDATE

さて、INSERT の時点で ScalarDB を利用して「Cassandra の『Partition を跨いだ複数のレコード』を『同一 Tx』で更新」できることがほぼ確認できてしまいましたが、せっかくなので UPDATE も実行してみます。先ほど INSERT したレコードのカラム v の値を以下のように UPDATE します。

+----+----+-----+
| pk | ck |  v  |
+----+----+-----+
| 1  | 1  | 100 |
| 2  | 2  | 200 |
+----+----+-----+

上記のようなデータを、ScalarDB の Transactional API を使って UPDATE します (ScalarDB の API としては Put を使います)。具体的なコードは以下の通りです。

※ScalarDB で既存のレコードを更新 (Put) する場合は、一度対象となるレコードを参照 (Get) する必要があります。このあたりの動作については こちらのスライド に記載されているので、興味がある方はこのスライドも参照してみてください。

package com.example;

import java.util.Properties;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Put;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class UpdateOnCassandra {
    public static void main(String[] args) throws Exception {

        Properties properties = new Properties();
        properties.setProperty("scalar.db.contact_points", "localhost");
        properties.setProperty("scalar.db.contact_port", "9042");
        properties.setProperty("scalar.db.storage", "cassandra");
        properties.setProperty("scalar.db.username", "cassandra");
        properties.setProperty("scalar.db.password", "cassandra");

        TransactionFactory transactionFactory = TransactionFactory.create(properties);
        DistributedTransactionManager manager = transactionFactory.getTransactionManager();

        // Begin Tx
        DistributedTransaction transaction = manager.begin();

        // UPDATE foo SET v = 100 WHERE pk = 1 AND ck = 1
        Key partitionKey1 = Key.ofInt("pk", 1);
        Key clusteringKey1 = Key.ofInt("ck", 1);

        Get get1 = 
            Get.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .build();
        transaction.get(get1);

        Put put1 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey1)
                .clusteringKey(clusteringKey1)
                .intValue("v", 100)
                .build();
        transaction.put(put1);

        // UPDATE foo SET v = 200 WHERE pk = 2 AND ck = 2
        Key partitionKey2 = Key.ofInt("pk", 2);
        Key clusteringKey2 = Key.ofInt("ck", 2);
        Get get2 = 
            Get.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .build();
        transaction.get(get2);

        Put put2 = 
            Put.newBuilder()
                .namespace("ns")
                .table("foo")
                .partitionKey(partitionKey2)
                .clusteringKey(clusteringKey2)
                .intValue("v", 200)
                .build();
        transaction.put(put2);

        // Commit Tx
        transaction.commit();

        manager.close();
    }
}

ScalarDB でレコードを UPDATE した後に、Cassandra に cqlsh で接続し、実際に格納されたレコードの内容を確認してみます。Tx ID の情報を合わせて確認すると、「同じ Tx ID で (同じ Tx で) Cassandra の Partition を跨いだ 2つのレコードが UPDATE されている」ことが確認できます。

cqlsh> SELECT pk, ck, v, tx_id FROM ns.foo;

 pk | ck | v   | tx_id
----+----+-----+--------------------------------------
  1 |  1 | 100 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3
  2 |  2 | 200 | 67e1ed69-8bee-478d-b9e5-7fb6774e36b3

(2 rows)

まとめ

ということで、ScalarDB を使うと「Cassandra 上の Partition が異なるレコードを 1つの Tx で UPDATE できる」ことが確認できました。このような感じで、ScalarDB を使うと NoSQL 上で ACID Transaction を実行できます。

なお、一貫性のある状態でレコードを参照 (SELECT) するためには ScalarDB を使って SELECT (ScalarDB の API としては Get) する必要があります。今回は、同一 Tx (ID) で更新されていることを確認するために、Cassandra に直接接続してメタデータを含むレコードの情報を参照しましたが、この方法では参照時のデータの一貫性が担保されないので、実際に ScalarDB を使ってアプリを作成する場合はご注意ください。

Scalar DB on CockroachDB を試してみた

分散 Tx マネージャーである Scalar DBStorage として複数の DB をサポート していますが、その中に PostgreSQL も含まれています。

PostgreSQL がサポートされているということは、Scalar DB と PostgreSQL が「PostgreSQLプロトコルを使って通信している」ということです (具体的には JDBC ドライバを使っています)。

そして、PostgreSQLプロトコルで通信しているということは、PostgreSQLプロトコル互換のある CockroachDB でもいける可能性があるということです!!!

ということで、Scalar DB on CockroachDB を試してみました。

注意

前述した通り、Scalar DB にて PostgreSQL はサポート されていますが、CockroachDB はサポートされていない DB です。今回の内容はあくまで趣味の範囲で検証したものなので、あしからず。

環境

今回は以下の環境で検証しています。

バージョン

Ubuntu : 20.04
OpenJDK : 11
Docker : 20.10.12
Scalar DB : 3.5.0
CockroachDB : 21.2.5
Container Image (CockroachDB) : cockroachdb/cockroach

Scalar DB の使い方

Scalar DB には「Java のライブラリとして使う方法」と「gRPC サーバーとして使う方法」の 2種類があります。

  • Pattern 1 (As a Java Library)
+----------------------+
|       Java App       |
| +------------------+ |                                +----------------------+
| |    Scalar DB     |--------------------------------->|      Backend DB      |
| +------------------+ |                                | (PostgreSQL etc...)  |
+----------------------+                                +----------------------+
  • Pattern 2 (As a gRPC Server)
+----------------------+
|         App          |
| +------------------+ |    +----------------------+    +----------------------+
| | Scalar DB Client |----->|   Scalar DB Server   |--->|      Backend DB      |
| +------------------+ |    |    (gRPC Server)     |    | (PostgreSQL etc...)  |
+----------------------+    +----------------------+    +----------------------+

今回は「Java のライブラリとして使う」方で検証します。

CockroachDB の準備

最初に、Scalar DB の Storage として利用する CockroachDB を準備します。

クラスタ構築 (3匹構成)

本題からそれてしまうので構築方法の詳細は割愛しますが、今回は以下のような 3匹構成の CockroachDB クラスタ (Docker を利用したローカルの Secure クラスタ) を使います。cockroach-1 が 127.0.0.1:26257 でクライアントからの接続を LISTEN しているので、Scalar DB からはこの 127.0.0.1:26257 に接続します。

  • コンテナ
$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
f1726fd20c6d   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
be0584fde8e6   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
37d8c9c42790   cockroachdb/cockroach:v21.2.5   "/cockroach/cockroac…"   46 minutes ago   Up 46 minutes   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
7e918c6d4e29   cockroachdb/cockroach:v21.2.5   "tail -f /dev/null"      46 minutes ago   Up 46 minutes   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.5 | 2022-02-23 00:53:26.41591  | 2022-02-23 00:53:26.483088 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.5 | 2022-02-23 00:53:27.073393 | 2022-02-23 00:53:27.149113 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.5 | 2022-02-23 00:53:27.527108 | 2022-02-23 00:53:27.602613 | region=region-1,zone=zone-c | true         | true

DB 作成

CockroachDB 側で Scalar DB が利用する DB (db0) を作成します。

  • DB 作成
$ docker exec -it cockroach-client ./cockroach sql --user=root --certs-dir=certs --host=cockroach-1:26257
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v21.2.5 (x86_64-unknown-linux-gnu, built 2022/02/07 21:01:07, go1.16.6) (same version as client)
# Cluster ID: e3e484e2-8026-4bc5-8a6f-15ff7a764e9f
#
# Enter \? for a brief introduction.
#
root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> CREATE DATABASE db0;
CREATE DATABASE  


Time: 37ms total (execution 37ms / network 0ms)  

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SHOW DATABASES;
  database_name | owner | primary_region | regions | survival_goal
----------------+-------+----------------+---------+----------------
  db0           | root  | NULL           | {}      | NULL
  defaultdb     | root  | NULL           | {}      | NULL
  intro         | root  | NULL           | {}      | NULL
  postgres      | root  | NULL           | {}      | NULL
  system        | node  | NULL           | {}      | NULL
(5 rows)  


Time: 4ms total (execution 4ms / network 0ms)  

root@cockroach-1:26257/defaultdb>

ユーザー作成

Scalar DB が CockroachDB にアクセスする際のユーザー (scalar) を作成します。今回はパスワード認証でアクセスするため、パスワードも併せて設定しておきます。また、今回は scalar ユーザーに db0 に対するフルアクセスの権限をざっくりと付与しておきます。

  • ユーザー作成
root@cockroach-1:26257/defaultdb> CREATE USER scalar WITH PASSWORD 'xxxxxxxx';
CREATE ROLE


Time: 250ms total (execution 249ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> GRANT ALL ON DATABASE db0 TO scalar;
GRANT


Time: 105ms total (execution 104ms / network 0ms)

root@cockroach-1:26257/defaultdb>
root@cockroach-1:26257/defaultdb> SHOW USERS;
  username  | options | member_of
------------+---------+------------
  admin     |         | {}
  cockroach |         | {}
  root      |         | {admin}
  scalar    |         | {}
(4 rows)


Time: 9ms total (execution 8ms / network 0ms)

root@cockroach-1:26257/defaultdb> 

これで、CockroachDB 側での準備は完了です。実際は TABLE 作成も必要ですが、Scalar DB で使う TABLE は Scalar DB 側のツールを使って作成します。

Scalar DB の準備

次に、Scalar DB 側の準備を行います。

設定ファイル作成

まずは、Scalar DB や Schema Loader から CockroachDB に接続するための設定ファイル (database.properties) を準備します。今回は、必要最低限の設定として「JDBC での接続情報」「ユーザー/パスワード」のみ設定します。

この設定ファイル内で、CockroachDB コンテナが LISTEN している 127.0.0.1:26257 と、CockroachDB 側で作成した DB (db0) を指定しています。

  • database.properties
# Use PostgreSQL (JDBC Database)
scalar.db.storage=jdbc

# JDBC URL
scalar.db.contact_points=jdbc:postgresql://127.0.0.1:26257/db0

# User and Password
scalar.db.username=scalar
scalar.db.password=xxxxxxxx

TABLE 作成

次に、テスト用の TABLE を作成します。(分散 Tx マネージャーである) Scalar DB では、クライアント側 (Scalar DB 側 ) で分散 Tx を実現するために Distributed WAL と呼ばれるメタデータをレコード (TABLE) 内に保持する仕組みになっています。

そのため、TABLE を作成する際は Distributed WAL を格納するためのカラムも一緒に定義する必要がありますが、Schema Loader というツールを使うといい感じに TABLE を作成してくれます。

まずは、GitHub Releases から Schema Loader をダウンロードします。

  • Schema Loader をダウンロード
$ curl -OL https://github.com/scalar-labs/scalardb/releases/download/v3.5.0/scalardb-schema-loader-3.5.0.jar

$ ls -l scalardb-schema-loader-3.5.0.jar 
-rw-rw-r-- 1 ubuntu ubuntu 60464284 Feb 23 11:33 scalardb-schema-loader-3.5.0.jar

そして、作成する TABLE の情報を JSON 形式で用意します。

{
  "s0.t0": {
    "transaction": true,
    "partition-key": [
      "id"
    ],
    "clustering-key": [],
    "columns": {
      "id": "INT",
      "c0": "INT"
    }
  }
}

今回は「"s0" スキーマ」内に「"t0" テーブル」を作成し、「id (int/primary key)」「c0 (int)」という 2つのカラムを定義します。要するに、通常の DDL だと以下のような感じの操作をしているイメージです。

  • DDL のイメージ
CREATE SCHEMA s0;
CREATE TABLE s0.t0 (id INT PRIMARY KEY, c0 INT);

用意した JSON ファイル (test-schema.json) を指定して Schema Loader を実行します。この時、事前に用意した database.properties ファイル (CockroachDB に JDBC で接続するための情報を記載した設定ファイル) も指定します。

  • Schema Loader 実行
$ java -jar ./scalardb-schema-loader-3.5.0.jar --config ./database.properties -f ./test-schema.json --coordinator
[main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Config path: ./database.properties
[main] INFO com.scalar.db.schemaloader.command.SchemaLoaderCommand - Schema path: ./test-schema.json
[main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the table t0 in the namespace s0 succeeded.
[main] INFO com.scalar.db.schemaloader.SchemaOperator - Creating the coordinator table succeeded.

これで TABLE 作成は完了です。試しに、直接 CockroachDB に接続して確認してみると、以下のような TABLE が作成されていることが確認できます。

  • TABLE 定義
root@cockroach-1:26257/db0> SHOW COLUMNS FROM s0.t0;
       column_name       | data_type | is_nullable | column_default | generation_expression |  indices  | is_hidden
-------------------------+-----------+-------------+----------------+-----------------------+-----------+------------
  id                     | INT8      |    false    | NULL           |                       | {primary} |   false
  c0                     | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_id                  | STRING    |    true     | NULL           |                       | {primary} |   false
  tx_state               | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_version             | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_prepared_at         | INT8      |    true     | NULL           |                       | {primary} |   false
  tx_committed_at        | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_id           | STRING    |    true     | NULL           |                       | {primary} |   false
  before_tx_state        | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_version      | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_prepared_at  | INT8      |    true     | NULL           |                       | {primary} |   false
  before_tx_committed_at | INT8      |    true     | NULL           |                       | {primary} |   false
  before_c0              | INT8      |    true     | NULL           |                       | {primary} |   false
(13 rows)

また、実際には Scalar DB 側で分散 Tx 等を管理するために必要なメタデータを格納する TABLE (scalardb.metadata / coordinator.state) も作成されていることが確認できます。

  • 作成された TABLE 一覧
root@cockroach-1:26257/db0> SHOW TABLES;
  schema_name | table_name | type  | owner  | estimated_row_count | locality
--------------+------------+-------+--------+---------------------+-----------
  coordinator | state      | table | scalar |                   0 | NULL
  s0          | t0         | table | scalar |                   0 | NULL
  scalardb    | metadata   | table | scalar |                  18 | NULL
(3 rows)

これで、Scalar DB 側の事前準備も完了です。

Scalar DB を使った CRUD

ということで、Scalar DB を使った CRUD 操作を実施してみようと思います。

が、現状 Scalar DB に SQL クライアントのようなツールはなく、今回は前述した通り Scalar DB を Java のライブラリとして利用するので、まずは CRUD 操作を実行するための Java App を用意します。

Scalar DB のダウンロード

GitHub から clone してきて build する方法もあるのですが、Scalar DB は Maven Central で公開されているので、今回はそこからダウンロードしてきます。

Java App の作成

今回は以下の 3 のプログラムで CRUD 操作を実行します。各コード内で先ほど準備した database.properties を読み込んで CockroachDB に JDBC で接続しています。

  • Write.java (Create / Update)
package com.example;

import java.io.File;
import java.io.IOException;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Put;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Write {
    public static void main(String[] args) throws TransactionException, IOException {

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties")));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);
        int value = Integer.parseInt(args[1]);

        try {
            Get get = new Get(new Key("id", id));
            tx.get(get);
            Put put = new Put(new Key("id", id)).withValue("c0", value);
            tx.put(put);
            tx.commit();
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}
package com.example;

import java.io.File;
import java.io.IOException;
import java.util.Optional;

import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.api.Result;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Read {
    public static void main(String[] args) throws TransactionException, IOException {

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig(new File("./database.properties")));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);

        try {
            Get get = new Get(new Key("id", id));
            Optional<Result> result = tx.get(get);
            tx.commit();
            if (result.isPresent()) {
                int value = result.get().getValue("c0").get().getAsInt();
                System.out.println("id: " + id);
                System.out.println("c0: " + value);
            } else {
                System.out.println("\"id = " + id + "\" does not exist");
            }
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}
  • Remove.java (Delete)
package com.example;

import java.io.File;
import java.io.IOException;

import com.scalar.db.api.Delete;
import com.scalar.db.api.DistributedTransaction;
import com.scalar.db.api.DistributedTransactionManager;
import com.scalar.db.api.Get;
import com.scalar.db.config.DatabaseConfig;
import com.scalar.db.exception.transaction.TransactionException;
import com.scalar.db.io.Key;
import com.scalar.db.service.TransactionFactory;

public class Remove {
    public static void main(String[] args) throws TransactionException, IOException{

        TransactionFactory factory = new TransactionFactory(new DatabaseConfig((new File("./database.properties"))));
        DistributedTransactionManager manager = factory.getTransactionManager();
        manager.with("s0", "t0");
        DistributedTransaction tx = manager.start();

        int id = Integer.parseInt(args[0]);

        try {
            Get get = new Get(new Key("id", id));
            tx.get(get);
            Delete del = new Delete(new Key("id", id));
            tx.delete(del);
            tx.commit();
        } catch (Exception e) {
            tx.abort();
            throw e;
        }
    }
}

ちなみに、今回は例外処理をサボっていますが、「分散 Tx を実行する」だけあって、実際はいろんなパターンのエラーを想定した複数の例外処理を実施する必要があります。(検証用のコードでそこまでガッツリ例外処理する元気はありませんでした...)

興味がある方は A Guide on How to Handle ExceptionsTrouble-shooting Guilde を参照してみてください。

App を実行

では、用意した各 App を実行してみます。

Create

まずは Create です。t0 TABLE に対して id = 1 / c0 = 100 のレコードを INSERT します。

  • Create
$ java -cp ./lib/*: com.example.Write 1 100

App 実行後、CockroachDB 側で直接確認すると、以下のようにレコードが INSERT されていることが確認できます。

  • CockroachDB 側で確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+------
   1 | 100
(1 row)

Read

次に Read です。先ほど書き込んだ id = 1 / c0 = 100 のレコードを Scalar DB 経由で SELECT してみます。

  • Read
$ java -cp ./lib/*: com.example.Read 1
id: 1
c0: 100

Update

次は Update です。先ほど書き込んだ id = 1 / c0 = 100 のレコードの c0 の値を 200 に UPDATE してみます。(※Create/INSERT と同じものを利用します。)

  • Update
$ java -cp ./lib/*: com.example.Write 1 200

App 実行後、Scalar DB 経由で SELECT してみると、値が更新されていることが確認できます。

  • Read (Update 後の確認)
$ java -cp ./lib/*: com.example.Read 1
id: 1
c0: 200

また、CockroachDB 側で直接 SELECT すると、値が UPDATE されていることが確認できます。

  • CockroachDB 側で UPDATE された値を確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+------
   1 | 200
(1 row)

Delete

最後に Delete です。先ほど書き込んだ id = 1 のレコードを DELETE してみます。

  • Delete
$ java -cp ./lib/*: com.example.Remove 1

App 実行後、Scalar DB 経由で SELECT してみると、id = 1 のレコードが削除されていることが確認できます。

  • Read (Delete 後の確認)
$ java -cp ./lib/*: com.example.Read 1
"id = 1" does not exist

また、CockroachDB 側で直接 SELECT すると、レコードが DELETE されていることが確認できます。

  • CockroachDB 側で DELETE されたことを確認
root@cockroach-1:26257/db0> SELECT id, c0 FROM s0.t0;
  id | c0
-----+-----
(0 rows)

まとめ

ということで、とりあえず Scalar DB on CockroachDB でシンプルな CRUD 操作は実行できました。(繰り返しになりますが、公式にサポートされている訳ではないのであしからず...)

なお、CockroachDB にアクセスする云々の前に Java 周りで (サンプル App の作成で) しこたま躓いたのは内緒です。

Java なんもわからん... (´・ω・`)

CockroachDB に「禰󠄀」を INSERT

TL に「DB に『禰󠄀』を INSERT した際の異体字セレクタ」の話題が流れてきたので、CockroachDB で試してみました。

環境

今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。

バージョン

Ubuntu : 20.04
Docker : 20.10.12
CockroachDB : 21.2.4
Container Image : cockroachdb/cockroach

クラスタ (3匹構成)

$ docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
f3a847c27d48   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
7c6036d2172d   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
b8a80a6847e3   cockroachdb/cockroach:v21.2.4   "/cockroach/cockroac…"   11 minutes ago   Up 11 minutes   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
5f5ea7063316   cockroachdb/cockroach:v21.2.4   "tail -f /dev/null"      11 minutes ago   Up 11 minutes   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

$ docker exec -it cockroach-client bash
[root@cockroach-client cockroach]# 
[root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1
  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.2.4 | 2022-02-06 11:01:14.758259 | 2022-02-06 11:13:37.299944 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.2.4 | 2022-02-06 11:01:15.701614 | 2022-02-06 11:13:38.253956 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.2.4 | 2022-02-06 11:01:16.204495 | 2022-02-06 11:13:38.742721 | region=region-1,zone=zone-c | true         | true
(3 rows)

「禰󠄀」を INSERT

root@cockroach-1:26257/defaultdb> CREATE TABLE t0 (c0 STRING);
CREATE TABLE


Time: 74ms total (execution 73ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> INSERT INTO t0 VALUES ('竈門禰豆子');
INSERT 1


Time: 16ms total (execution 16ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SELECT * FROM t0;
      c0
---------------
  竈門禰󠄀豆子
(1 row)


Time: 2ms total (execution 1ms / network 0ms)

特に問題なく INSERT / SELECT できました。

CockroachDB の文字コード関連の設定

CREATE DATABASE のページを見ると、CockroachDB の encoding の設定は UTF-8 のみサポートされる旨の記載がありましたが、扱えるバイト数等の情報は確認できませんでした。

  • ドキュメント抜粋

    The CREATE DATABASE statement accepts an optional ENCODING clause for compatibility with PostgreSQL, but UTF-8 is the only supported encoding. The aliases UTF8 and UNICODE are also accepted. Values should be enclosed in single quotes and are case-insensitive.

また、SET (session variable) のページに server_encoding / client_encoding の設定の記載がありますが、ORM との互換性を保つために用意されている設定項目のようであり、CockroachDB 自体の文字 (文字コード) の扱いには影響しなさそうな雰囲気でした。

  • ドキュメント抜粋

    Variable name Description Initial value Modify with SET ?
    client_encoding (Reserved; exposed only for ORM compatibility.) UTF8 No
    server_encoding (Reserved; exposed only for ORM compatibility.) UTF8 Yes

まとめ

特に問題なく「禰󠄀」を INSERT できました。

ただ、ターミナルで「禰」と表示されたり「禰󠄀」と表示されたりする理由がよく分かりませんでした...

異体字セレクタ難しい (´・ω・`)

株式会社 Scalar に入社しました

2021/12/31 付けで約 9年弱勤めた前職を退職し、2022/01/01 から 株式会社 Scalar でお仕事をさせてもらうことになりました。大きな節目であり、せっかくなので、入社エントリを残しておこうと思います。

Scalar はどんな会社なのか

Scalar (Twitter: @Scalar_labs) は、「THE WORLD'S RELIABLE DATABASE」をビジョンとして掲げ、分散 DB (分散 Tx マネージャー) である Scalar DB と分散型台帳である Scalar DL という 2つのプロダクトを中心に、DB 関連のプロダクトの研究開発を行なっている会社です。

また、Scalar DB は OSS (Apache License 2.0) で公開されており、Scalar DL は商用ライセンスでのみ提供されています。

  • Scalar DB (Apache License 2.0)
  • Scalar DL (Commercial License only)
    • Docs
    • GitHub
      • ※商用ライセンスのみでの提供なので、GitHub 上でも基本的にはドキュメントのみが公開されています。

私も絶賛勉強中なので、各プロダクトの概要については以下のホームページをご覧ください。しばらくしたら (OSS である Scalar DB を中心に) プライベートでもアウトプットしていきたいなぁと思ったりしてます (思ってるだけ)

転職した経緯/理由

私の今までのキャリアとしては、いわゆる「サポートエンジニア」のキャリアが長い状況で、PostgreSQL / NGINX / Linux あたりを中心にした OSS のサポート (特に PostgreSQL のサポート経験が長い) やパブリッククラウドのサポートをやってきました。DB を好きになったのも、PostgreSQL のサポートをしていた部分が大きいと思います。

また、少しだけ SI プロジェクトにも参加したことがありましたが、上記の通りサポート歴が長く、「何かを作る」という経験が少なかったため、(特に転職活動はしていなかったのですが) 漠然と「エンジニアとして何か (サービスやプロダクト) を "作る" 仕事がしてみたい」と思っていました。

そのような状況で Scalar から声をかけていただいたのですが、上記の通りサポートの仕事が長く開発系の仕事はほとんど経験がなかったので、最初は「自分のスキルセットではマッチしないのでは」とかなり及び腰になっていました。

しかし、分散 DB である Scalar DB というプロダクト自体や、分散 DB の研究開発をしているという Scalar の業務内容にはかなり興味があったので、一度お話を聞かせていただくことにしました。

その中で、「私のスキルセットでは合わない気がするのですが...」という部分も正直に伝えた上で、会社のことやプロダクトのことについていろいろとお話させていただくことができました。スタートアップで働くことも初であり不安もあったのですが、最終的に 5回ほど面談の場を設けていただき、私が不安に思っている部分や疑問点について事前にしっかりお話させていただけたことが安心材料になりました。

また、技術的な部分としては、個人的に「DB が好き」ということもあるのですが、マイクロサービスにおける複数サービス (各サービスが使っている複数の DB) 間で一貫性のある更新を可能にする Scalar DB はとても興味深いものでした。当時 (今もですが) CockroachDB を通して「分散 Tx」等にも興味を持っていた私には、かなり「刺さる」プロダクトでした。

加えて、(正直に言うと当初は名前すら知らなかったのですが) 契約書等の様々な重要な書類 (従来紙だったもの等) の電子化が進み「電子データの信頼性」がより重要になってきている昨今の状況において、DB 自体に改ざん検知機能をもたせる (DB 自体にデータの信頼性を高める機能をもたせる) Scalar DL というプロダクトについても、とても興味深いものでした。

更に、両プロダクト共に「水平スケール (スケールアウト) できる」という部分もとても魅力的であり、それぞれのプロダクトが今後活躍できそう (需要がありそう) と思った部分も決め手の 1つでした。

正直なところ前職はとても居心地の良い会社だったため、転職するか否か最後まで悩んだのですが、「自分が好きな DB という技術分野で仕事ができる」「やってみたかった "作る" 仕事ができる」「プロダクトが魅力的」という部分が勝り、転職を決断した次第です。

Scalar でやること

Scalar での私の当面のミッションの 1つ目は「各プロダクトのサポート (主に技術面でのサポート)」です。前述した通り、サポートエンジニアとしてのキャリアが一番長いので、まずはそのあたりをスキルを活かして貢献していけるように頑張っていこうと思います。

そして、2つ目のミッションは「クラウド/Kubernetes 環境へのデプロイを容易にする」ことです。いわゆる「クラウドネイティブ化を推進する」という感じでしょうか。主に以下の 2つのリポジトリを中心に活動していく予定になっており、この部分が私が挑戦したかった「何かを作る」部分になってくると思います。

技術コミュニティのみなさまへ

実は、今回の転職は以前参加していた Database Internals 輪読会 での繋がりがきっかけでご縁をいただくことができた次第となっています。また、Cloud Native Database Meetup で私がアウトプットした内容も見ていただいた上で、面談でいろいろなお話をさせていただくことができました。

更に、上記のようなコミュニティでのアウトプットにおける私の「第一歩」は Cloud Native Developers JP での LT でした (めちゃくちゃ緊張してたので当時どんな感じでお話をしたか覚えてません...w)。技術コミュニティへの参加やアウトプットの機会が無ければ Scalar に巡り会うことはできなかったと思います。

上記コミュニティを含め、今まで参加させていただいた各コミュニティの運営/関係者/参加者のみなさま、本当にありがとうございました。これからも DB 界隈や Cloud Native 界隈を中心に技術コミュニティでわいわいしていきたいと思いますので、今後もよろしくお願いします!

まとめ

ということで、2022 年は心機一転、Scalar で新しいことにチャレンジしていきたいと思います。正直なところ、まだ不安な部分 (主に自分のスキルでどこまで貢献できるのかという部分) もあるのですが、自分が好きな DB や Kubernetes に関わる仕事ができるので、テンションは上がっています。

前職のみなさま、長い間ほんとうにお世話になりました。最後にご挨拶させていただいた際、みなさま明るく前向きに送り出していただいたこと、本当に感謝しています。ありがとうございました。

Scalar のみなさま、まだまだ未熟な部分もありますが、少しでもお役に立てるよう頑張っていきたいと思いますので、よろしくお願いします!

We are hiring!

入社エントリでよくあるやつです!(一度自分で書いてみたかった)

Scalar では、DB が好きなメンバーを絶賛募集中です!

  • DB が好きな SRE
  • DB が好きなフルスタックエンジニア
  • DB が好きなエンジニアリングマネージャ
  • DB が好きなプロダクトマネージャ

等々、一緒に働く仲間を全方位募集中ですので、興味がある方は是非以下のサイトをご覧ください!

CockroachDB に 1レコード INSERT した時にアクセスされるファイルのお話

最近話題 (?) の「DB に 1レコード INSERT した時にアクセスされるファイル」について、CockroachDB で検証してみました。

元ネタ

元ネタは以下の Blog です。
MySQLエキスパートyoku0825が目指す、DBAとしての未来像

「インストールされたばかりのMySQLがあるとして、特定テーブルに1件のレコードを最初にINSERTした場合、アクセスが発生するファイルとその理由をすべて教えてください」

カジュアルとはいえ、面談で急にこれを聞かれたらテンパる自信が有ります。

環境

今回は以下の環境 (Docker を利用したローカルの Secure クラスタ) で検証しています。

バージョン

Ubuntu : 20.04
Docker : 20.10.8
CockroachDB : 21.1.7
Container Image : cockroachdb/cockroach

クラスタ (3匹構成)

$ sudo docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
605c2a704bbd   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   15 seconds ago   Up 14 seconds   26257/tcp, 127.0.0.1:8083->8080/tcp                    cockroach-3
054a35a7586a   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   18 seconds ago   Up 18 seconds   26257/tcp, 127.0.0.1:8082->8080/tcp                    cockroach-2
dc9c30a61132   cockroachdb/cockroach:v21.1.7   "/cockroach/cockroac…"   23 seconds ago   Up 23 seconds   127.0.0.1:26257->26257/tcp, 127.0.0.1:8081->8080/tcp   cockroach-1
d75bfcddf87c   cockroachdb/cockroach:v21.1.7   "tail -f /dev/null"      26 seconds ago   Up 25 seconds   8080/tcp, 26257/tcp                                    cockroach-client

※cockroach-client は sql shell を実行するためのクライアント用コンテナ。

$ sudo docker exec -it cockroach-client bash
[root@cockroach-client cockroach]# 
[root@cockroach-client cockroach]# cockroach node status --certs-dir=certs --host=cockroach-1
  id |      address      |    sql_address    |  build  |         started_at         |         updated_at         |          locality           | is_available | is_live
-----+-------------------+-------------------+---------+----------------------------+----------------------------+-----------------------------+--------------+----------
   1 | cockroach-1:26257 | cockroach-1:26257 | v21.1.7 | 2021-08-28 06:19:05.168392 | 2021-08-28 06:19:59.219781 | region=region-1,zone=zone-a | true         | true
   2 | cockroach-2:26257 | cockroach-2:26257 | v21.1.7 | 2021-08-28 06:19:08.95911  | 2021-08-28 06:19:58.486166 | region=region-1,zone=zone-b | true         | true
   3 | cockroach-3:26257 | cockroach-3:26257 | v21.1.7 | 2021-08-28 06:19:12.531782 | 2021-08-28 06:19:57.557849 | region=region-1,zone=zone-c | true         | true
(3 rows)

CockroachDB では、cockroach start コマンドでの起動時に "-s (--store)" オプションで指定したディレクトリの中に、DB や TABLE に関連するファイル (実データ) が格納されるため、このオプションに指定したディレクトリ配下のファイルアクセスを調べます。

また、コンテナ起動時に (docker の) "-v" オプションでホスト側のディレクトリをコンテナにマウントさせているので、ファイルアクセスについては Docker ホスト側から inotifywait コマンドを使って調べています。

TABLE 作成

最初に、検証に利用する TABLE を作成しておきます。

[root@cockroach-client cockroach]# cockroach sql --certs-dir=certs --host=cockroach-1
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v21.1.7 (x86_64-unknown-linux-gnu, built 2021/08/09 17:55:28, go1.15.14) (same version as client)
# Cluster ID: e77ad798-d3bc-4bd3-91a8-960c3e7549ce
#
# Enter \? for a brief introduction.
#
root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> CREATE TABLE t1 (c1 INT, c2 STRING);
CREATE TABLE

Time: 75ms total (execution 75ms / network 0ms)

root@cockroach-1:26257/defaultdb> 
root@cockroach-1:26257/defaultdb> SHOW COLUMNS FROM t1;
  column_name | data_type | is_nullable | column_default | generation_expression |  indices  | is_hidden
--------------+-----------+-------------+----------------+-----------------------+-----------+------------
  c1          | INT8      |    true     | NULL           |                       | {}        |   false
  c2          | STRING    |    true     | NULL           |                       | {}        |   false
  rowid       | INT8      |    false    | unique_rowid() |                       | {primary} |   true
(3 rows)

Time: 53ms total (execution 53ms / network 0ms)

root@cockroach-1:26257/defaultdb>

また、この TABLE の Leaseholder (Raft Leader) を確認しておきます。

root@cockroach-1:26257/defaultdb> SELECT database_name, table_name, replicas, lease_holder FROM crdb_internal.ranges WHERE table_name = 't1';
  database_name | table_name | replicas | lease_holder
----------------+------------+----------+---------------
  defaultdb     | t1         | {1,2,3}  |            1
(1 row)

Time: 14ms total (execution 13ms / network 0ms)

今回の場合、Node ID 1 (cockroach-1) が Leaseholder (Raft の Leader)、Node ID 2/Node ID 3 (cockroach-2/cockroach-3) が replica (Raft の follower) になっているようです。

本命の前に (定期的にアクセスされるファイル)

今回は「1レコード INSERT した時にアクセスされるファイル」を調べたいのですが、どうやら CockroachDB では「何もしなくても定期的にファイルアクセスが発生」しているようです (推測ですが、恐らく Raft 関連の処理や Web UI で確認できるメトリクスを保存する処理に起因してファイルアクセスが発生していると思われます)。

なので、まずは何もしてなくても定期的にアクセスされているファイルを確認しておきます (とりあえず 3分ほどファイルアクセスを確認します)。

Leaseholder (cockroach-1) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > file_access_cockroach-1
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m14.764s
user    0m0.032s
sys     0m0.070s

cockroach-1 がアクセスしているファイル

# sort ./file_access_cockroach-1 | uniq -c
     53 ./cockroach-1/ : ACCESS,ISDIR
     41 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/ : OPEN,ISDIR
   1704 ./cockroach-1/000011.log : MODIFY
     82 ./cockroach-1/auxiliary : ACCESS,ISDIR
     41 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/auxiliary : OPEN,ISDIR
     82 ./cockroach-1/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR
     82 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-1/logs : ACCESS,ISDIR
     41 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs : OPEN,ISDIR
     82 ./cockroach-1/logs/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/ : OPEN,ISDIR
     19 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
     82 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
     41 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR
     82 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR
     82 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR
     41 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR
     82 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
     41 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR

replica (cockroach-2) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > file_access_cockroach-2
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m15.499s
user    0m0.073s
sys     0m0.092s

cockroach-2 がアクセスしているファイル

# sort ./file_access_cockroach-2 | uniq -c
     55 ./cockroach-2/ : ACCESS,ISDIR
     41 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/ : OPEN,ISDIR
   1694 ./cockroach-2/000378.log : MODIFY
     82 ./cockroach-2/auxiliary : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR
     82 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
     82 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR
     82 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR
     83 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR
     83 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR
     82 ./cockroach-2/logs : ACCESS,ISDIR
     41 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs : OPEN,ISDIR
     82 ./cockroach-2/logs/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/ : OPEN,ISDIR
     19 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
     82 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
     41 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR
     82 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR
     82 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR
     41 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR
     82 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
     41 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     41 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR

replica (cockroach-3) で確認

# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > file_access_cockroach-3
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m17.032s
user    0m0.052s
sys     0m0.116s

cockroach-3 がアクセスしているファイル

# sort ./file_access_cockroach-3 | uniq -c
     61 ./cockroach-3/ : ACCESS,ISDIR
     43 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/ : OPEN,ISDIR
   1712 ./cockroach-3/000379.log : MODIFY
     86 ./cockroach-3/auxiliary : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR
     86 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR
     86 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR
     86 ./cockroach-3/logs : ACCESS,ISDIR
     43 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/logs : OPEN,ISDIR
     86 ./cockroach-3/logs/ : ACCESS,ISDIR
     43 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     43 ./cockroach-3/logs/ : OPEN,ISDIR
     20 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
     84 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
     42 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     42 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR
     84 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR
     42 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     42 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR
     88 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR
     44 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     44 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR
     88 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
     44 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     44 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE
    309 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN

cockroach-1 (Leaseholder) と比べて、cockroach-2/cockroach-3 (Replica) の方がアクセスされているファイルが多いように見えます。この差分も気になるところですが、今回の本題からはそれるので一旦気にしないでおきます。

本命 (INSERT 時にアクセスしているファイル)

それでは、本命について調べてみます。先程と同じように、ホスト側で inotfywait を実行した上で、INSERT を実行します。

INSERT 文

root@cockroach-1:26257/defaultdb> BEGIN;
BEGIN

Time: 0ms total (execution 1ms / network 0ms)

root@cockroach-1:26257/defaultdb  OPEN> 
root@cockroach-1:26257/defaultdb  OPEN> INSERT INTO t1 VALUES (111, 'aaa');
INSERT 1

Time: 2ms total (execution 2ms / network 0ms)

root@cockroach-1:26257/defaultdb  OPEN> 
root@cockroach-1:26257/defaultdb  OPEN> COMMIT;
COMMIT

Time: 14ms total (execution 14ms / network 0ms)

root@cockroach-1:26257/defaultdb>

Leaseholder (cockroach-1)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-1/ > INSERT_file_access_cockroach-1
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m59.656s
user    0m0.040s
sys     0m0.105s

INSERT 時に cockroach-1 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-1 | uniq -c
     67 ./cockroach-1/ : ACCESS,ISDIR
     52 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/ : OPEN,ISDIR
      1 ./cockroach-1/000002.log : MOVED_FROM
      1 ./cockroach-1/000011.log : CLOSE_WRITE,CLOSE
    163 ./cockroach-1/000011.log : MODIFY
     84 ./cockroach-1/000013.sst : ACCESS
      3 ./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-1/000013.sst : DELETE
      2 ./cockroach-1/000013.sst : OPEN
   1966 ./cockroach-1/000014.log : MODIFY
      1 ./cockroach-1/000014.log : MOVED_TO
      1 ./cockroach-1/000014.log : OPEN
     77 ./cockroach-1/000015.sst : ACCESS
      2 ./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/000015.sst : CREATE
      1 ./cockroach-1/000015.sst : DELETE
     65 ./cockroach-1/000015.sst : MODIFY
      3 ./cockroach-1/000015.sst : OPEN
     20 ./cockroach-1/000016.sst : ACCESS
      1 ./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/000016.sst : CREATE
    134 ./cockroach-1/000016.sst : MODIFY
      2 ./cockroach-1/000016.sst : OPEN
      2 ./cockroach-1/MANIFEST-000001 : MODIFY
    104 ./cockroach-1/auxiliary : ACCESS,ISDIR
     52 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/auxiliary : OPEN,ISDIR
    104 ./cockroach-1/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-1/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/auxiliary/ : OPEN,ISDIR
    105 ./cockroach-1/cockroach-temp755268128 : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128 : OPEN,ISDIR
    105 ./cockroach-1/cockroach-temp755268128/ : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/ : OPEN,ISDIR
    104 ./cockroach-1/cockroach-temp755268128/auxiliary : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary : OPEN,ISDIR
    104 ./cockroach-1/cockroach-temp755268128/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/cockroach-temp755268128/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-1/logs : ACCESS,ISDIR
     52 ./cockroach-1/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs : OPEN,ISDIR
    104 ./cockroach-1/logs/ : ACCESS,ISDIR
     52 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/ : OPEN,ISDIR
      1 ./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
     24 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
    104 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-1/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-1/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-1/logs/goroutine_dump/ : OPEN,ISDIR
    114 ./cockroach-1/logs/heap_profiler : ACCESS,ISDIR
     57 ./cockroach-1/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     57 ./cockroach-1/logs/heap_profiler : OPEN,ISDIR
    114 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
     57 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     57 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY
      1 ./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN

cockroach-1 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-1 | uniq) <(sort ./INSERT_file_access_cockroach-1 | uniq)
--- /dev/fd/63    2021-08-28 15:46:27.767770309 +0900
+++ /dev/fd/62    2021-08-28 15:46:27.771772598 +0900
@@ -1,7 +1,29 @@
 ./cockroach-1/ : ACCESS,ISDIR
 ./cockroach-1/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/ : OPEN,ISDIR
+./cockroach-1/000002.log : MOVED_FROM
+./cockroach-1/000011.log : CLOSE_WRITE,CLOSE
 ./cockroach-1/000011.log : MODIFY
+./cockroach-1/000013.sst : ACCESS
+./cockroach-1/000013.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-1/000013.sst : DELETE
+./cockroach-1/000013.sst : OPEN
+./cockroach-1/000014.log : MODIFY
+./cockroach-1/000014.log : MOVED_TO
+./cockroach-1/000014.log : OPEN
+./cockroach-1/000015.sst : ACCESS
+./cockroach-1/000015.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-1/000015.sst : CLOSE_WRITE,CLOSE
+./cockroach-1/000015.sst : CREATE
+./cockroach-1/000015.sst : DELETE
+./cockroach-1/000015.sst : MODIFY
+./cockroach-1/000015.sst : OPEN
+./cockroach-1/000016.sst : ACCESS
+./cockroach-1/000016.sst : CLOSE_WRITE,CLOSE
+./cockroach-1/000016.sst : CREATE
+./cockroach-1/000016.sst : MODIFY
+./cockroach-1/000016.sst : OPEN
+./cockroach-1/MANIFEST-000001 : MODIFY
 ./cockroach-1/auxiliary : ACCESS,ISDIR
 ./cockroach-1/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/auxiliary : OPEN,ISDIR
@@ -26,6 +48,7 @@
 ./cockroach-1/logs/ : ACCESS,ISDIR
 ./cockroach-1/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/logs/ : OPEN,ISDIR
+./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
 ./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log : MODIFY
 ./cockroach-1/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-1/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -39,3 +62,13 @@
 ./cockroach-1/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-1/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-1/logs/heap_profiler/ : OPEN,ISDIR
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_15.201.253542400.txt : DELETE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_39_25.201.254353408.txt : DELETE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CLOSE_WRITE,CLOSE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : CREATE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : MODIFY
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_05.202.259219456.txt : OPEN
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CLOSE_WRITE,CLOSE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : CREATE
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : MODIFY
+./cockroach-1/logs/heap_profiler/memstats.2021-08-28T06_40_15.202.260571136.txt : OPEN

replica (cockroach-2)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-2/ > INSERT_file_access_cockroach-2
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m58.508s
user    0m0.092s
sys     0m0.123s

INSERT 時に cockroach-2 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-2 | uniq -c
     74 ./cockroach-2/ : ACCESS,ISDIR
     52 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/ : OPEN,ISDIR
      1 ./cockroach-2/000367.log : MOVED_FROM
      1 ./cockroach-2/000378.log : CLOSE_WRITE,CLOSE
    591 ./cockroach-2/000378.log : MODIFY
     88 ./cockroach-2/000380.sst : ACCESS
      3 ./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-2/000380.sst : DELETE
      2 ./cockroach-2/000380.sst : OPEN
   1504 ./cockroach-2/000381.log : MODIFY
      1 ./cockroach-2/000381.log : MOVED_TO
      1 ./cockroach-2/000381.log : OPEN
     78 ./cockroach-2/000382.sst : ACCESS
      2 ./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/000382.sst : CREATE
      1 ./cockroach-2/000382.sst : DELETE
     68 ./cockroach-2/000382.sst : MODIFY
      3 ./cockroach-2/000382.sst : OPEN
     13 ./cockroach-2/000383.sst : ACCESS
      1 ./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/000383.sst : CREATE
    130 ./cockroach-2/000383.sst : MODIFY
      2 ./cockroach-2/000383.sst : OPEN
      2 ./cockroach-2/MANIFEST-000001 : MODIFY
    104 ./cockroach-2/auxiliary : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
    103 ./cockroach-2/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14 : OPEN,ISDIR
    103 ./cockroach-2/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9 : OPEN,ISDIR
    104 ./cockroach-2/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717 : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717 : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/ : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/ : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/auxiliary : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary : OPEN,ISDIR
    104 ./cockroach-2/cockroach-temp575432717/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/cockroach-temp575432717/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-2/logs : ACCESS,ISDIR
     52 ./cockroach-2/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs : OPEN,ISDIR
    104 ./cockroach-2/logs/ : ACCESS,ISDIR
     52 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/ : OPEN,ISDIR
      1 ./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
     24 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
    104 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-2/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-2/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-2/logs/goroutine_dump/ : OPEN,ISDIR
    120 ./cockroach-2/logs/heap_profiler : ACCESS,ISDIR
     60 ./cockroach-2/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     60 ./cockroach-2/logs/heap_profiler : OPEN,ISDIR
    120 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
     60 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     60 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY
      1 ./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN

cockroach-2 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-2 | uniq) <(sort ./INSERT_file_access_cockroach-2 | uniq)
--- /dev/fd/63    2021-08-28 15:49:21.260992890 +0900
+++ /dev/fd/62    2021-08-28 15:49:21.264996153 +0900
@@ -1,7 +1,29 @@
 ./cockroach-2/ : ACCESS,ISDIR
 ./cockroach-2/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/ : OPEN,ISDIR
+./cockroach-2/000367.log : MOVED_FROM
+./cockroach-2/000378.log : CLOSE_WRITE,CLOSE
 ./cockroach-2/000378.log : MODIFY
+./cockroach-2/000380.sst : ACCESS
+./cockroach-2/000380.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-2/000380.sst : DELETE
+./cockroach-2/000380.sst : OPEN
+./cockroach-2/000381.log : MODIFY
+./cockroach-2/000381.log : MOVED_TO
+./cockroach-2/000381.log : OPEN
+./cockroach-2/000382.sst : ACCESS
+./cockroach-2/000382.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-2/000382.sst : CLOSE_WRITE,CLOSE
+./cockroach-2/000382.sst : CREATE
+./cockroach-2/000382.sst : DELETE
+./cockroach-2/000382.sst : MODIFY
+./cockroach-2/000382.sst : OPEN
+./cockroach-2/000383.sst : ACCESS
+./cockroach-2/000383.sst : CLOSE_WRITE,CLOSE
+./cockroach-2/000383.sst : CREATE
+./cockroach-2/000383.sst : MODIFY
+./cockroach-2/000383.sst : OPEN
+./cockroach-2/MANIFEST-000001 : MODIFY
 ./cockroach-2/auxiliary : ACCESS,ISDIR
 ./cockroach-2/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/auxiliary : OPEN,ISDIR
@@ -248,6 +270,7 @@
 ./cockroach-2/logs/ : ACCESS,ISDIR
 ./cockroach-2/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/logs/ : OPEN,ISDIR
+./cockroach-2/logs/cockroach-pebble.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
 ./cockroach-2/logs/cockroach.cockroach-2.root.2021-08-28T06_19_08Z.000001.log : MODIFY
 ./cockroach-2/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-2/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -261,3 +284,38 @@
 ./cockroach-2/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-2/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-2/logs/heap_profiler/ : OPEN,ISDIR
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_08.976.244809728.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_30_18.976.246157312.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_38.983.246288384.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_48.984.247365632.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_39_58.984.248446976.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_08.984.249528320.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : DELETE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_18.985.250609664.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_28.985.251420672.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_38.985.252772352.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_48.985.253313024.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_40_58.985.254394368.txt : OPEN
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CLOSE_WRITE,CLOSE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : CREATE
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : MODIFY
+./cockroach-2/logs/heap_profiler/memstats.2021-08-28T06_41_08.985.255471616.txt : OPEN

replica (cockroach-3)

# time inotifywait -mr --format '%w%f : %e' ./cockroach-3/ > INSERT_file_access_cockroach-3
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
^C

real    3m58.410s
user    0m0.068s
sys     0m0.148s

INSERT 時に cockroach-3 がアクセスしているファイル

# sort ./INSERT_file_access_cockroach-3 | uniq -c
     68 ./cockroach-3/ : ACCESS,ISDIR
     52 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/ : OPEN,ISDIR
      1 ./cockroach-3/000368.log : MOVED_FROM
      1 ./cockroach-3/000379.log : CLOSE_WRITE,CLOSE
    567 ./cockroach-3/000379.log : MODIFY
    116 ./cockroach-3/000381.sst : ACCESS
      3 ./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-3/000381.sst : DELETE
      2 ./cockroach-3/000381.sst : OPEN
   1506 ./cockroach-3/000382.log : MODIFY
      1 ./cockroach-3/000382.log : MOVED_TO
      1 ./cockroach-3/000382.log : OPEN
     80 ./cockroach-3/000383.sst : ACCESS
      2 ./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE
      1 ./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/000383.sst : CREATE
      1 ./cockroach-3/000383.sst : DELETE
     66 ./cockroach-3/000383.sst : MODIFY
      3 ./cockroach-3/000383.sst : OPEN
     15 ./cockroach-3/000384.sst : ACCESS
      1 ./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/000384.sst : CREATE
    126 ./cockroach-3/000384.sst : MODIFY
      2 ./cockroach-3/000384.sst : OPEN
      2 ./cockroach-3/MANIFEST-000001 : MODIFY
    104 ./cockroach-3/auxiliary : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/1 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/1/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/1/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/10 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/10/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/10/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/11 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/11/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/11/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/12 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/12/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/12/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/13 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/13/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/13/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/14 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/14/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/14/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/15 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/15/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/15/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/16 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/16/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/16/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/17 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/17/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/17/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/18 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/18/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/18/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/19 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/19/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/19/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/2 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/2/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/2/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/20 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/20/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/20/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/21 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/21/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/21/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/22 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/22/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/22/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/23 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/23/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/23/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/24 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/24/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/24/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/25 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/25/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/25/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/26 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/26/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/26/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/27 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/27/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/27/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/28 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/28/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/28/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/29 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/29/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/29/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/3 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/3/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/3/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/30 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/30/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/30/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/31 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/31/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/31/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/32 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/32/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/32/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/33 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/33/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/33/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/34 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/34/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/34/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/35 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/35/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/35/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/36 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/36/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/36/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/4 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/4/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/4/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/5 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/5/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/5/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/6 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/6/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/6/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/7 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/7/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/7/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/8 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/8/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/8/ : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/9 : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9 : OPEN,ISDIR
    104 ./cockroach-3/auxiliary/sstsnapshot/9/ : ACCESS,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/auxiliary/sstsnapshot/9/ : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710 : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710 : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710 : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/ : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/ : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/auxiliary : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary : OPEN,ISDIR
    104 ./cockroach-3/cockroach-temp395666710/auxiliary/ : ACCESS,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/cockroach-temp395666710/auxiliary/ : OPEN,ISDIR
    104 ./cockroach-3/logs : ACCESS,ISDIR
     52 ./cockroach-3/logs : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs : OPEN,ISDIR
    104 ./cockroach-3/logs/ : ACCESS,ISDIR
     52 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/ : OPEN,ISDIR
      2 ./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
     24 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
    104 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
     52 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/goroutine_dump : OPEN,ISDIR
    104 ./cockroach-3/logs/goroutine_dump/ : ACCESS,ISDIR
     52 ./cockroach-3/logs/goroutine_dump/ : CLOSE_NOWRITE,CLOSE,ISDIR
     52 ./cockroach-3/logs/goroutine_dump/ : OPEN,ISDIR
    118 ./cockroach-3/logs/heap_profiler : ACCESS,ISDIR
     59 ./cockroach-3/logs/heap_profiler : CLOSE_NOWRITE,CLOSE,ISDIR
     59 ./cockroach-3/logs/heap_profiler : OPEN,ISDIR
    118 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
     59 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
     59 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY
      1 ./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN

cockroach-3 での INSERT 時と平常時の差分

# diff -u <(sort ./file_access_cockroach-3 | uniq) <(sort ./INSERT_file_access_cockroach-3 | uniq)
--- /dev/fd/63    2021-08-28 15:49:43.289889149 +0900
+++ /dev/fd/62    2021-08-28 15:49:43.289889149 +0900
@@ -1,7 +1,29 @@
 ./cockroach-3/ : ACCESS,ISDIR
 ./cockroach-3/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/ : OPEN,ISDIR
+./cockroach-3/000368.log : MOVED_FROM
+./cockroach-3/000379.log : CLOSE_WRITE,CLOSE
 ./cockroach-3/000379.log : MODIFY
+./cockroach-3/000381.sst : ACCESS
+./cockroach-3/000381.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-3/000381.sst : DELETE
+./cockroach-3/000381.sst : OPEN
+./cockroach-3/000382.log : MODIFY
+./cockroach-3/000382.log : MOVED_TO
+./cockroach-3/000382.log : OPEN
+./cockroach-3/000383.sst : ACCESS
+./cockroach-3/000383.sst : CLOSE_NOWRITE,CLOSE
+./cockroach-3/000383.sst : CLOSE_WRITE,CLOSE
+./cockroach-3/000383.sst : CREATE
+./cockroach-3/000383.sst : DELETE
+./cockroach-3/000383.sst : MODIFY
+./cockroach-3/000383.sst : OPEN
+./cockroach-3/000384.sst : ACCESS
+./cockroach-3/000384.sst : CLOSE_WRITE,CLOSE
+./cockroach-3/000384.sst : CREATE
+./cockroach-3/000384.sst : MODIFY
+./cockroach-3/000384.sst : OPEN
+./cockroach-3/MANIFEST-000001 : MODIFY
 ./cockroach-3/auxiliary : ACCESS,ISDIR
 ./cockroach-3/auxiliary : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/auxiliary : OPEN,ISDIR
@@ -248,6 +270,7 @@
 ./cockroach-3/logs/ : ACCESS,ISDIR
 ./cockroach-3/logs/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/logs/ : OPEN,ISDIR
+./cockroach-3/logs/cockroach-pebble.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
 ./cockroach-3/logs/cockroach.cockroach-3.root.2021-08-28T06_19_12Z.000001.log : MODIFY
 ./cockroach-3/logs/goroutine_dump : ACCESS,ISDIR
 ./cockroach-3/logs/goroutine_dump : CLOSE_NOWRITE,CLOSE,ISDIR
@@ -261,8 +284,33 @@
 ./cockroach-3/logs/heap_profiler/ : ACCESS,ISDIR
 ./cockroach-3/logs/heap_profiler/ : CLOSE_NOWRITE,CLOSE,ISDIR
 ./cockroach-3/logs/heap_profiler/ : OPEN,ISDIR
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_20_32.541.47427880.pprof : DELETE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CLOSE_WRITE,CLOSE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : CREATE
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : MODIFY
-./cockroach-3/logs/heap_profiler/memprof.2021-08-28T06_33_22.550.56282280.pprof : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_30_12.564.245551104.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_32.557.246333440.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_42.557.247955456.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_39_52.557.248496128.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_02.558.249307136.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : DELETE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_12.558.250114048.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_22.558.251195392.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_32.559.252276736.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_42.559.253898752.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_40_52.558.254980096.txt : OPEN
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CLOSE_WRITE,CLOSE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : CREATE
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : MODIFY
+./cockroach-3/logs/heap_profiler/memstats.2021-08-28T06_41_02.559.255791104.txt : OPEN

差分確認

定期的にアクセスされていたファイルと INSERT 時にアクセスされていたファイルを比較し、INSERT 時にのみアクセスされていたファイルを確認してみようと思います。

XXXXXX.log ファイル

拡張子が ".log" になっているファイルは、エラーメッセージ等を保存する「ログファイル」ではなく、 WAL (Write Ahead Log) です。この WAL は、CockroachDB の Storage Engine として利用されている Pebble が出力しているファイルです。

こちらについては起動直後 (INSERT していないタイミング) でも定期的にアクセスが発生していることが確認できていますが、CockroachDB では Raft 関連のデータ (Raft Log) や Web UI (DB Console) で参照できるクラスタのメトリクスの情報も他の TABLE と同じように KV 形式のデータとして Pebble に保存されます。

そのため、ユーザが INSERT/UPDATE/DELETE 等を実行していなくても定期的に WAL への書き込みが発生している状況であり、INSERT の瞬間にアクセスされたことを明確に観測できている訳では無いのですが、CockroachDB は ACID (今回の場合は特に Durability の部分) 準拠の DB であるため、仕組み上 INSERT 時に WAL (XXXXXX.log) ファイルへのアクセス (Write) が発生することは間違いないと思われます。

※strace でも確認してみましたが、どこかのタイミング (他のレコードを INSERT したタイミング?) で openat(2) して掴みっぱなしにしているのか、INSERT 時に WAL を openat(2) している形跡が確認できませんでした...

XXXXXX.sst ファイル

拡張子が ".sst" になっているファイルは、SSTable (Sorted String Table) と呼ばれるファイルです。こちらも、CockroachDB の Storage Engine である Pebble が出力しているものであり、TABLE の実データが含まれている LSM Tree 実装のファイルです。

しかし、何度か検証してみたところ「INSERT の瞬間に SSTable (XXXXXX.sst) にアクセスしている訳ではない」という感じのようです。

Pebble は LSM Tree 実装の KVS であるため、INSERT されたデータは前述した WAL (XXXXXX.log) に書き込まれた上で、メモリ上の memtable に格納されます。そして、memtable が一定のサイズ以上になった場合や、定期的に実行される memtable のフラッシュ処理時に、memtable の内容が SSTable (XXXXXX.sst) にフラッシュされます。

そのため、厳密に言うと SSTable (XXXXXX.sst) は INSERT 時にアクセスされるファイルではありませんが、INSERT した際に memtable のサイズが上限値に達した場合は、SSTable (XXXXXX.sst) へのアクセス (Write) が発生する動作になると思われます。

MANIFEST-000001 ファイル

こいつについては正体がわかりませんでした...

Pebble のログに以下のような出力が有るので、こいつも Pebble 関連のファイルだと思うのですが、INSERT の処理に関連しているのか否かは分かりませんでした...

# grep MANIFEST cockroach-pebble.log
I210828 06:19:03.852876 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 1  [JOB 1] MANIFEST created 000001
I210828 06:19:03.884580 82 3@vendor/github.com/cockroachdb/pebble/version_set.go:156 ⋮ [n?,pebble,s?] 4  [JOB 1] MANIFEST created 000001

また、このファイルはバイナリデータなのですが、strings や hexdump で中身を覗いてみたところ cockroach_comparator という単語が見えたので、そのあたりをヒントにして別の機会に調べてみようと思います。

# file cockroach-1/MANIFEST-000001 
cockroach-1/MANIFEST-000001: data

# strings MANIFEST-000001 | head -n 1
cockroach_comparator

# hexdump -C MANIFEST-000001 | head -n 2
00000000  bf 13 d7 16 1a 00 01 01  14 63 6f 63 6b 72 6f 61  |.........cockroa|
00000010  63 68 5f 63 6f 6d 70 61  72 61 74 6f 72 03 02 04  |ch_comparator...|

logs/ ディレクトリ配下のファイル

以下の形式で出力されているファイルは TEXT 形式のファイルであり、いわゆる「ログファイル」です。そのため、これらは定常的にアクセスされており、INSERT に直接関連したアクセスではないと思われます。

./cockroach-1/logs/cockroach-pebble.cockroach-1.root.2021-08-28T06_19_03Z.000001.log
./cockroach-1/logs/cockroach.cockroach-1.root.2021-08-28T06_19_03Z.000001.log

ただし、INSERT に伴い memtable のフラッシュや WAL の recycle が発生すると、それらの処理を実行した旨のメッセージがログファイルに出力されるため、INSERT 時にファイルアクセスが発生する可能性もあります。

  • memtable のフラッシュ (SSTable 作成)
I210828 07:56:15.365857 381443 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 92  [JOB 44] flushing: sstable created 000036
I210828 07:56:15.670978 381475 3@vendor/github.com/cockroachdb/pebble/compaction.go:1985 ⋮ [n1,pebble,s1] 95  [JOB 46] compacting: sstable created 000037
  • WAL の作成 (recycled)
I210828 07:56:15.365219 253 3@vendor/github.com/cockroachdb/pebble/db.go:1449 ⋮ [n1,pebble,s1] 90  [JOB 43] WAL created 000035 (recycled 000017)

また、logs/heap_profiler/ 配下のファイルについて詳細は調べられていないのですが、ファイル名にタイムスタンプの情報を含んでいることから、定期的にアクセス (更新) されているファイルのようであり、INSERT の処理には直接関連していなさそうです。

ちなみに、.txt になっているファイルの中身を見ると以下のようになっており、メモリ関連の統計情報を扱っているファイルであるようです。

# head -n 30 memstats.2021-08-28T07_34_25.259.282726400.txt
Go memory stats:
{
  "Alloc": 58207552,
  "TotalAlloc": 8454525400,
  "Sys": 147476488,
  "Lookups": 0,
  "Mallocs": 42250539,
  "Frees": 42004715,
  "HeapAlloc": 58207552,
  "HeapSys": 128581632,
  "HeapIdle": 65052672,
  "HeapInuse": 63528960,
  "HeapReleased": 58875904,
  "HeapObjects": 245824,
  "StackInuse": 5636096,
  "StackSys": 5636096,
  "MSpanInuse": 653616,
  "MSpanSys": 1015808,
  "MCacheInuse": 13888,
  "MCacheSys": 16384,
  "BuckHashSys": 2235814,
  "GCSys": 8726760,
  "OtherSys": 1263994,
  "NextGC": 65079600,
  "LastGC": 1630136045376634882,
  "PauseTotalNs": 39247543,
  "PauseNs": [
    59176,
    88149,
    182033,

おまけ

CockroachDB 起動 (DB 初期化) 直後に作成されているファイルは以下のようになっていました。SSTable (XXXXXX.sst ファイル) は初期状態では存在していないようです。

CockroachDB 起動 (DB 初期化) 直後に作成されているファイル

$ sudo ls -laFR cockroach-1
cockroach-1:
total 360516
drwxr-xr-x 5 root root    4096 Aug 29 10:51 ./
drwxr-xr-x 5 root root    4096 Aug 29 10:50 ../
-rw-r----- 1 root root  147639 Aug 29 10:50 000002.log
-rw-r----- 1 root root  456550 Aug 29 10:50 000004.log
-rw-r----- 1 root root  800183 Aug 29 10:50 000005.log
-rw-r----- 1 root root 1761113 Aug 29 10:51 000006.log
-rw-r----- 1 root root  286878 Aug 29 10:51 000007.log
-rw-r----- 1 root root      16 Aug 29 10:50 CURRENT
-rw-r----- 1 root root       0 Aug 29 10:50 LOCK
-rw-r----- 1 root root      44 Aug 29 10:50 MANIFEST-000001
-rw-r----- 1 root root    2224 Aug 29 10:50 OPTIONS-000003
drwxr-x--- 2 root root    4096 Aug 29 10:50 auxiliary/
drwxr-xr-x 3 root root    4096 Aug 29 10:50 cockroach-temp096599273/
-rw-r----- 1 root root      17 Aug 29 10:50 cockroach.advertise-addr
-rw-r----- 1 root root      17 Aug 29 10:50 cockroach.advertise-sql-addr
-rw-r----- 1 root root      16 Aug 29 10:50 cockroach.http-addr
-rw-r----- 1 root root      10 Aug 29 10:50 cockroach.listen-addr
-rw-r----- 1 root root      10 Aug 29 10:50 cockroach.sql-addr
drwxr-x--- 4 root root    4096 Aug 29 10:50 logs/
-rw-r----- 1 root root      50 Aug 29 10:50 temp-dirs-record.txt

cockroach-1/auxiliary:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../

cockroach-1/cockroach-temp096599273:
total 24
drwxr-xr-x 3 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root 4096 Aug 29 10:51 ../
-rw-r----- 1 root root    0 Aug 29 10:50 000002.log
-rw-r----- 1 root root   16 Aug 29 10:50 CURRENT
-rw-r----- 1 root root    0 Aug 29 10:50 LOCK
-rw-r----- 1 root root   50 Aug 29 10:50 MANIFEST-000001
-rw-r----- 1 root root 2159 Aug 29 10:50 OPTIONS-000003
-rw-r----- 1 root root    0 Aug 29 10:50 TEMP_DIR.LOCK
drwxr-x--- 2 root root 4096 Aug 29 10:50 auxiliary/

cockroach-1/cockroach-temp096599273/auxiliary:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-xr-x 3 root root 4096 Aug 29 10:50 ../

cockroach-1/logs:
total 136
drwxr-x--- 4 root root   4096 Aug 29 10:50 ./
drwxr-xr-x 5 root root   4096 Aug 29 10:51 ../
-rw-r----- 1 root root   2242 Aug 29 10:51 cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     65 Aug 29 10:50 cockroach-pebble.log -> cockroach-pebble.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
-rw-r----- 1 root root    973 Aug 29 10:50 cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     65 Aug 29 10:50 cockroach-stderr.log -> cockroach-stderr.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
-rw-r----- 1 root root 105762 Aug 29 10:51 cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
lrwxrwxrwx 1 root root     58 Aug 29 10:50 cockroach.log -> cockroach.cockroach-1.root.2021-08-29T01_50_45Z.000001.log
drwxr-x--- 2 root root   4096 Aug 29 10:50 goroutine_dump/
drwxr-x--- 2 root root   4096 Aug 29 10:51 heap_profiler/

cockroach-1/logs/goroutine_dump:
total 8
drwxr-x--- 2 root root 4096 Aug 29 10:50 ./
drwxr-x--- 4 root root 4096 Aug 29 10:50 ../

cockroach-1/logs/heap_profiler:
total 72
drwxr-x--- 2 root root  4096 Aug 29 10:51 ./
drwxr-x--- 4 root root  4096 Aug 29 10:50 ../
-rw-r----- 1 root root 37375 Aug 29 10:50 memprof.2021-08-29T01_50_57.174.37237424.pprof
-rw-r----- 1 root root  9186 Aug 29 10:50 memstats.2021-08-29T01_50_57.184.150753280.txt
-rw-r----- 1 root root  9312 Aug 29 10:51 memstats.2021-08-29T01_51_07.174.175755264.txt

まとめ

CockroachDB に 1レコード INSERT すると...

  • データの永続化のために WAL (XXXXXX.log ファイル) にアクセスする。
  • (INSERT で memtable のサイズが上限を超えると) memtable を永続化するために SSTable (XXXXXX.sst ファイル) にアクセスすると思われる。
  • (詳細は不明だが) MANIFEST-000001 というファイルにアクセスしてるっぽい...?

という感じになってました。

Pebble なんもわからん (´・ω・`)