This is an automated email from the ASF dual-hosted git repository.
sumitagrawal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 59a7b6592c HDDS-8415. Recon UI:OM DB Insights Changes (#4940)
59a7b6592c is described below
commit 59a7b6592c874caf40eb70664d3666722cd88ed7
Author: smitajoshi12 <[email protected]>
AuthorDate: Fri Jun 30 17:23:50 2023 +0530
HDDS-8415. Recon UI:OM DB Insights Changes (#4940)
---
.../webapps/recon/ozone-recon-web/api/db.json | 3528 +++++++++++++++++++-
.../webapps/recon/ozone-recon-web/api/routes.json | 41 +-
.../src/components/navBar/navBar.less | 8 +
.../src/components/navBar/navBar.tsx | 22 +-
.../src/constants/breadcrumbs.constants.tsx | 3 +-
.../webapps/recon/ozone-recon-web/src/routes.tsx | 6 +
.../overview.less => insights/om/om.less} | 19 +-
.../ozone-recon-web/src/views/insights/om/om.tsx | 1042 ++++++
.../src/views/overview/overview.less | 6 +
.../src/views/overview/overview.tsx | 55 +-
10 files changed, 4589 insertions(+), 141 deletions(-)
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
index 7d73479a35..d821e1377f 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
@@ -983,6 +983,234 @@
"keys": {
"totalCount": 534,
"keys": [
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-0-77505",
+ "DataSize": 10240,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206297511460860
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:18:43.688Z",
+ "ModificationTime": "2019-11-26T21:18:46.062Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-21-64511",
+ "DataSize": 5692407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206299949795380
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:20.855Z",
+ "ModificationTime": "2019-11-26T21:19:20.991Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-22-69104",
+ "DataSize": 189407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206300033091740
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:22.126Z",
+ "ModificationTime": "2019-11-26T21:19:22.251Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-0-77505",
+ "DataSize": 10240,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206297511460860
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:18:43.688Z",
+ "ModificationTime": "2019-11-26T21:18:46.062Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-21-64511",
+ "DataSize": 5692407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206299949795380
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:20.855Z",
+ "ModificationTime": "2019-11-26T21:19:20.991Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-22-69104",
+ "DataSize": 189407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206300033091740
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:22.126Z",
+ "ModificationTime": "2019-11-26T21:19:22.251Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-0-77505",
+ "DataSize": 10240,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206297511460860
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:18:43.688Z",
+ "ModificationTime": "2019-11-26T21:18:46.062Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-21-64511",
+ "DataSize": 5692407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206299949795380
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:20.855Z",
+ "ModificationTime": "2019-11-26T21:19:20.991Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-22-69104",
+ "DataSize": 189407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206300033091740
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:22.126Z",
+ "ModificationTime": "2019-11-26T21:19:22.251Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-0-77505",
+ "DataSize": 10240,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206297511460860
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:18:43.688Z",
+ "ModificationTime": "2019-11-26T21:18:46.062Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-21-64511",
+ "DataSize": 5692407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206299949795380
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:20.855Z",
+ "ModificationTime": "2019-11-26T21:19:20.991Z"
+ },
+ {
+ "Volume": "vol-0-20448",
+ "Bucket": "bucket-0-12811",
+ "Key": "key-22-69104",
+ "DataSize": 189407,
+ "Versions": [
+ 0
+ ],
+ "Blocks": {
+ "0": [
+ {
+ "containerID": 1,
+ "localID": 103206300033091740
+ }
+ ]
+ },
+ "CreationTime": "2019-11-26T21:19:22.126Z",
+ "ModificationTime": "2019-11-26T21:19:22.251Z"
+ },
{
"Volume": "vol-0-20448",
"Bucket": "bucket-0-12811",
@@ -1285,95 +1513,47 @@
"sizeDirectKey": 0
},
"metadata": {
- "path": "",
- "type": "DUMMY_TYPE",
- "countStats": {
- "numVolume": 100,
- "numBucket": 200,
- "numDir": 400,
- "numKey": 80
- },
- "objectInfo": {
- "versioningEnabled": false,
- "metadata": {
-
+ "path": "",
+ "type": "DUMMY_TYPE",
+ "countStats": {
+ "numVolume": 100,
+ "numBucket": 200,
+ "numDir": 400,
+ "numKey": 80
},
- "name": "fso-bucket",
- "fileName": "file1",
- "file": false,
- "quotaInBytes": 1000000000,
- "quotaInNamespace": 2000000000,
- "usedNamespace": 10,
- "creationTime": 1673415921920,
- "modificationTime": 1673415921920,
- "acls": [
- {
- "type": "USER",
- "name": "hadoop",
- "aclScope": "ACCESS",
- "aclList": [
- "ALL"
- ]
- },
- {
- "type": "GROUP",
- "name": "hadoop",
- "aclScope": "ACCESS",
- "aclList": [
- "ALL"
- ]
- }
- ],
- "keyLocationVersions": [
- {
- "version": 0,
- "locationList": [
- {
- "blockID": {
- "containerBlockID": {
- "containerID": 1,
- "localID": 111677748019200007
- },
- "blockCommitSequenceId": 18,
- "containerID": 1,
- "localID": 111677748019200007
- },
- "length": 3879,
- "offset": 0,
- "token": null,
- "createVersion": 0,
- "pipeline": null,
- "partNumber": 0,
- "containerID": 1,
- "localID": 111677748019200007,
- "blockCommitSequenceId": 18
- }
- ],
- "multipartKey": false,
- "blocksLatestVersionOnly": [
- {
- "blockID": {
- "containerBlockID": {
- "containerID": 1,
- "localID": 111677748019200007
- },
- "blockCommitSequenceId": 18,
- "containerID": 1,
- "localID": 111677748019200007
- },
- "length": 3879,
- "offset": 0,
- "token": null,
- "createVersion": 0,
- "pipeline": null,
- "partNumber": 0,
- "containerID": 1,
- "localID": 111677748019200007,
- "blockCommitSequenceId": 18
- }
- ],
- "locationLists": [
- [
+ "objectInfo": {
+ "versioningEnabled": false,
+ "metadata": {},
+ "name": "fso-bucket",
+ "fileName": "file1",
+ "file": false,
+ "quotaInBytes": 1000000000,
+ "quotaInNamespace": 2000000000,
+ "usedNamespace": 10,
+ "creationTime": 1673415921920,
+ "modificationTime": 1673415921920,
+ "acls": [
+ {
+ "type": "USER",
+ "name": "hadoop",
+ "aclScope": "ACCESS",
+ "aclList": [
+ "ALL"
+ ]
+ },
+ {
+ "type": "GROUP",
+ "name": "hadoop",
+ "aclScope": "ACCESS",
+ "aclList": [
+ "ALL"
+ ]
+ }
+ ],
+ "keyLocationVersions": [
+ {
+ "version": 0,
+ "locationList": [
{
"blockID": {
"containerBlockID": {
@@ -1394,32 +1574,78 @@
"localID": 111677748019200007,
"blockCommitSequenceId": 18
}
- ]
- ],
- "locationListCount": 1
- }
- ],
- "volumeName": "volume1",
- "bucketName": "fso-bucket",
- "keyName": "file1",
- "dataSize": 18513,
- "storageType": "DISK",
- "versioning": false,
- "usedBytes": null,
- "encryptionInfo": null,
- "replicationConfig": {
- "replicationFactor": "THREE",
- "requiredNodes": 3,
- "replicationType": "RATIS"
- },
- "encInfo": null,
- "sourceVolume": null,
- "sourceBucket": null,
- "bucketLayout": "FILE_SYSTEM_OPTIMIZED",
- "owner": "hadoop",
- "volume": "vol1"
- },
- "status": "OK"
+ ],
+ "multipartKey": false,
+ "blocksLatestVersionOnly": [
+ {
+ "blockID": {
+ "containerBlockID": {
+ "containerID": 1,
+ "localID": 111677748019200007
+ },
+ "blockCommitSequenceId": 18,
+ "containerID": 1,
+ "localID": 111677748019200007
+ },
+ "length": 3879,
+ "offset": 0,
+ "token": null,
+ "createVersion": 0,
+ "pipeline": null,
+ "partNumber": 0,
+ "containerID": 1,
+ "localID": 111677748019200007,
+ "blockCommitSequenceId": 18
+ }
+ ],
+ "locationLists": [
+ [
+ {
+ "blockID": {
+ "containerBlockID": {
+ "containerID": 1,
+ "localID": 111677748019200007
+ },
+ "blockCommitSequenceId": 18,
+ "containerID": 1,
+ "localID": 111677748019200007
+ },
+ "length": 3879,
+ "offset": 0,
+ "token": null,
+ "createVersion": 0,
+ "pipeline": null,
+ "partNumber": 0,
+ "containerID": 1,
+ "localID": 111677748019200007,
+ "blockCommitSequenceId": 18
+ }
+ ]
+ ],
+ "locationListCount": 1
+ }
+ ],
+ "volumeName": "volume1",
+ "bucketName": "fso-bucket",
+ "keyName": "file1",
+ "dataSize": 18513,
+ "storageType": "DISK",
+ "versioning": false,
+ "usedBytes": null,
+ "encryptionInfo": null,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "encInfo": null,
+ "sourceVolume": null,
+ "sourceBucket": null,
+ "bucketLayout": "FILE_SYSTEM_OPTIMIZED",
+ "owner": "hadoop",
+ "volume": "vol1"
+ },
+ "status": "OK"
},
"quota": {
"allowed": 1000000000,
@@ -1603,7 +1829,7 @@
"lastUpdatedSeqNumber": 0
}
],
- "unhealthyContainers":{
+ "unhealthyContainers": {
"missingCount": 3,
"underReplicatedCount": 2,
"overReplicatedCount": 2,
@@ -2413,7 +2639,7 @@
"minAccessCount": 1,
"maxAccessCount": 39202
},
- "keyHeatmap": {
+ "keyHeatmap": {
"label": "root",
"children": [
{
@@ -3182,5 +3408,3075 @@
},
"disabledFeatures": [
"FLAG1"
+ ],
+
+ "keysOpenSummary": {
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 1000,
+ "totalReplicatedDataSize": 30000000,
+ "totalOpenKeys": 10
+ },
+ "lastKey": "",
+ "replicatedDataSize": 0,
+ "unreplicatedDataSize": 0,
+ "status": "OK"
+ },
+ "keysdeletePendingSummary":{
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 29291,
+ "totalReplicatedDataSize": 87873,
+ "totalDeletedKeys": 3
+ },
+ "lastKey": "/s3v/fso-bucket/dira/dira13/key3/-9223372036854762239",
+ "replicatedDataSize": 87873,
+ "unreplicatedDataSize": 29291,
+ "status": "OK"
+ },
+ "omMismatch":{
+ "lastKey":11,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 1,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 2,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 3,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 4,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 5,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 6,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 7,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 8,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 9,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 10,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ }
+ ]
+ },
+ "omMismatch1":{
+ "lastKey":21,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 11,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 12,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 13,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 14,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 15,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 16,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 17,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 18,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 19,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 20,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 21,
+ "numberOfKeys": 11,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ },
+ {
+ "containerId": 22,
+ "numberOfKeys": 12,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "SCM"
+ }
+ ]
+ },
+ "omMismatch2":{
+ "lastKey": null,
+ "containerDiscrepancyInfo": []
+ },
+ "scmMismatch":{
+ "lastKey":11,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 1,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 2,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 3,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 4,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 5,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 6,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 7,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 8,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 9,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 10,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ }
]
+ },
+ "scmMismatch1":{
+ "lastKey":21,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 11,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 12,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 13,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 14,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 15,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 16,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 17,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 18,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 19,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 20,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ }
+ ]
+ },
+ "scmMismatch2":{
+ "lastKey":31,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 21,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 22,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 23,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 24,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 25,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 26,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 27,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 28,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 29,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 30,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ }
+ ]
+ },
+ "scmMismatch3":{
+ "lastKey":41,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 31,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 32,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 33,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 34,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 35,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 36,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 37,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 38,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 39,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 40,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ }
+ ]
+ },
+ "scmMismatch4":{
+ "lastKey":51,
+ "containerDiscrepancyInfo": [
+ {
+ "containerId": 41,
+ "numberOfKeys": 1,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ },
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-613724nn"
+ },
+
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 42,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 43,
+ "numberOfKeys": 3,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 44,
+ "numberOfKeys": 4,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 45,
+ "numberOfKeys": 5,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 46,
+ "numberOfKeys": 6,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 47,
+ "numberOfKeys": 7,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 48,
+ "numberOfKeys": 8,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 49,
+ "numberOfKeys": 9,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ },
+ {
+ "containerId": 50,
+ "numberOfKeys": 10,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ],
+ "existsAt": "OM"
+ }
+ ]
+ },
+ "scmMismatch5":{
+ "lastKey": null,
+ "containerDiscrepancyInfo": []
+ },
+ "nonFSO": {
+ "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/1105696238501917",
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 1000,
+ "totalReplicatedDataSize": 3000,
+ "totalOpenKeys": 0
+ },
+ "nonFSO": [
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/01/110569623850191713",
+ "path": "nonfso 1",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2439/110569623850191713",
+ "path": "nonfso 2",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ }
+ ],
+ "status": "OK"
+ },
+ "nonFSO1": {
+ "lastKey":
"1/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/1105696238501917",
+ "nonFSO": [
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2440/110569623850191713",
+ "path": "nonfso 11",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2441/110569623850191713",
+ "path": "nonfso 12",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ }
+ ],
+ "status": "OK"
+ },
+ "nonFSO2": {
+ "lastKey": "",
+ "nonFSO": []
+ },
+ "fso": {
+ "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713",
+ "fso": [
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2401/110569623850191713",
+ "path": "1",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2402/110569623850191713",
+ "path": "2",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2403/110569623850191713",
+ "path": "3",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2404/110569623850191713",
+ "path": "4",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2405/110569623850191713",
+ "path": "5",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2406/110569623850191713",
+ "path": "6",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2407/110569623850191713",
+ "path": "7",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2408/110569623850191713",
+ "path": "8",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2409/110569623850191713",
+ "path": "9",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ },
+ {
+ "key": "fso 10",
+ "path": "10",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+
+ }
+ ],
+ "status": "OK"
+ },
+ "fso1": {
+ "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191713",
+ "fso": [
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713",
+ "path": "11",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 12",
+ "path": "12",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 13",
+ "path": "13",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 14",
+ "path": "14",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 15",
+ "path": "15",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 16 key",
+ "path": "16",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 17 key",
+ "path": "17",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 18 key",
+ "path": "18",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 19 key",
+ "path": "19",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 20 key",
+ "path": "20",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 21",
+ "path": "21",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 22",
+ "path": "22",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 23",
+ "path": "23",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 24",
+ "path": "24",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 25",
+ "path": "25",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 26",
+ "path": "26",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 27",
+ "path": "27",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 28",
+ "path": "28",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 29",
+ "path": "29",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 30",
+ "path": "30",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 31",
+ "path": "31",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 32",
+ "path": "32",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key": "fso 33",
+ "path": "33",
+ "inStateSince": 1686156887186,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ }
+ ],
+ "status": "OK"
+ },
+ "fso2": {
+ "lastKey": "",
+ "fso": []
+ },
+ "keydeletePending":{
+ "lastKey": "/volume/bucket1/rcmeevblsf/106/-9223372036843950335",
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 29291,
+ "totalReplicatedDataSize": 87873,
+ "totalDeletedKeys": 3
+ },
+ "replicatedDataSize": 300000000,
+ "unreplicatedDataSize": 100000000,
+ "deletedKeyInfo": [
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036844470271,
+ "updateID": 40429,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List1key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189663661,
+ "modificationTime": 1687189672598,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List1File1",
+ "file": false,
+ "path": "-9223372036844472575/0",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/0', dataSize='10000000', creationTime='1687189663661',
objectID='-9223372036844470271', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ },
+ {
+ "objectID": -9223372036844470271,
+ "updateID": 40429,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List1key1",
+ "dataSize": 20000000,
+ "creationTime": 1687189663661,
+ "modificationTime": 1687189672598,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List1File1",
+ "file": false,
+ "path": "-9223372036844472575/0",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/0', dataSize='10000000', creationTime='1687189663661',
objectID='-9223372036844470271', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ },
+ {
+ "objectID": -9223372036844470271,
+ "updateID": 40429,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List1key1",
+ "dataSize": 30000000,
+ "creationTime": 1687189663661,
+ "modificationTime": 1687189672598,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List1File1",
+ "file": false,
+ "path": "-9223372036844472575/0",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/0', dataSize='10000000', creationTime='1687189663661',
objectID='-9223372036844470271', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+
+ "objectID": -9223372036844470015,
+ "updateID": 40407,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List2Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189663664,
+ "modificationTime": 1687189671884,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List2File2",
+ "file": false,
+ "path": "-9223372036844472575/1",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/1', dataSize='10000000', creationTime='1687189663664',
objectID='-9223372036844470015', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036844432639,
+ "updateID": 40601,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List3Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189671823,
+ "modificationTime": 1687189676084,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List3File1",
+ "file": false,
+ "path": "-9223372036844472575/10",
+ "hsync": false,
+ "replicatedSize": 30000000
+ },
+ {
+ "objectID": -9223372036844432639,
+ "updateID": 40601,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List3Key1",
+ "dataSize": 20000000,
+ "creationTime": 1687189671823,
+ "modificationTime": 1687189676084,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List3File1",
+ "file": false,
+ "path": "-9223372036844472575/10",
+ "hsync": false,
+ "replicatedSize": 30000000
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843970815,
+ "updateID": 42403,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List4Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189713476,
+ "modificationTime": 1687189717756,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List4File3",
+ "file": false,
+ "path": "-9223372036844472575/100"
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843964159,
+ "updateID": 42443,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List5Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189714437,
+ "modificationTime": 1687189719458,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List5File1",
+ "file": false,
+ "path": "-9223372036844472575/101"
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843961087,
+ "updateID": 42450,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List6Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189714558,
+ "modificationTime": 1687189719533,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List6File1",
+ "file": false,
+ "path": "-9223372036844472575/102",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/102', dataSize='10000000', creationTime='1687189714558',
objectID='-9223372036843961087', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843959807,
+ "updateID": 42449,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List7Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189714594,
+ "modificationTime": 1687189719533,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List7File1",
+ "file": false,
+ "path": "-9223372036844472575/103",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/103', dataSize='10000000', creationTime='1687189714594',
objectID='-9223372036843959807', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843953919,
+ "updateID": 42467,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List8Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189715040,
+ "modificationTime": 1687189720085,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List8File1",
+ "file": false,
+ "path": "-9223372036844472575/104",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/104', dataSize='10000000', creationTime='1687189715040',
objectID='-9223372036843953919', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843951359,
+ "updateID": 42483,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List9Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189715391,
+ "modificationTime": 1687189720373,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List9File9",
+ "file": false,
+ "path": "-9223372036844472575/105",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/105', dataSize='10000000', creationTime='1687189715391',
objectID='-9223372036843951359', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ },
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": -9223372036843950335,
+ "updateID": 42478,
+ "parentObjectID": -9223372036844472575,
+ "volumeName": "volume",
+ "bucketName": "bucket1",
+ "keyName": "List10Key1",
+ "dataSize": 10000000,
+ "creationTime": 1687189715413,
+ "modificationTime": 1687189720247,
+ "replicationConfig": {
+ "replicationFactor": "THREE",
+ "requiredNodes": 3,
+ "replicationType": "RATIS"
+ },
+ "fileChecksum": null,
+ "fileName": "List10File1",
+ "file": false,
+ "path": "-9223372036844472575/106",
+ "hsync": false,
+ "replicatedSize": 30000000,
+ "fileEncryptionInfo": null,
+ "objectInfo": "OMKeyInfo{volume='volume', bucket='bucket1',
key='rcmeevblsf/106', dataSize='10000000', creationTime='1687189715413',
objectID='-9223372036843950335', parentID='-9223372036844472575',
replication='RATIS/THREE', fileChecksum='null}",
+ "updateIDset": true
+ }
+ ]
+ }
+ ],
+ "status": "OK"
+ },
+
+ "keydeletePending1": {
+
"lastKey":"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191",
+ "replicatedTotal": -1530804718628866300,
+ "unreplicatedTotal": -1530804718628866300,
+ "deletedKeyInfo": [
+ {
+ "omKeyInfoList": [
+ {
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key22",
+ "dataSize": 1000,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "file_key22",
+ "acls": [],
+ "path": "0/key_one",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": 120000000,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ },
+ {
+ "metadata": {},
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key22",
+ "dataSize": 2000,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "file_key22",
+ "acls": [],
+ "path": "0/key_one",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": -1530804718628866300,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ }
+ ]
+ }
+ ],
+ "status": "OK"
+ },
+ "keydeletePending2": {
+ "lastKey":"31",
+ "replicatedTotal": -1530804718628866300,
+ "unreplicatedTotal": -1530804718628866300,
+ "deletedKeyInfo": [
+ {
+ "omKeyInfoList": [
+ {
+ "metadata": {},
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key_31",
+ "dataSize": -1530804718628866300,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "key_one",
+ "acls": [],
+ "path": "0/key_one",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": -1530804718628866300,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ },
+ {
+ "metadata": {},
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key_32",
+ "dataSize": -1530804718628866300,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "key_two",
+ "acls": [],
+ "path": "0/key_two",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": -1530804718628866300,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ },
+ {
+ "metadata": {},
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key_33",
+ "dataSize": -1530804718628866300,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "key_one",
+ "acls": [],
+ "path": "0/key_one",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": -1530804718628866300,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ },
+ {
+ "metadata": {},
+ "objectID": 0,
+ "updateID": 0,
+ "parentObjectID": 0,
+ "volumeName": "sampleVol",
+ "bucketName": "bucketOne",
+ "keyName": "key_34",
+ "dataSize": -1530804718628866300,
+ "keyLocationVersions": [],
+ "creationTime": 0,
+ "modificationTime": 0,
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "STANDALONE"
+ },
+ "fileChecksum": null,
+ "fileName": "key_two",
+ "acls": [],
+ "path": "0/key_two",
+ "file": false,
+ "latestVersionLocations": null,
+ "replicatedSize": -1530804718628866300,
+ "fileEncryptionInfo": null,
+ "updateIDset": false
+ }
+ ]
+ }
+ ],
+ "status": "OK"
+ },
+ "keydeletePending3": {
+ "lastKey":"",
+ "deletedKeyInfo": []
+ },
+ "deleted": {
+ "lastKey": "11",
+ "containers": [
+ {
+ "containerId": 1,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 2,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 3,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 4,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 5,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 6,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 7,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 8,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 9,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 10,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ }
+ ]
+ },
+ "deleted1": {
+ "lastKey": "21",
+ "containers": [
+ {
+ "containerId": 11,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 12,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 13,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 14,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 15,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 16,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 17,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 18,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 19,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 20,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ }
+ ]
+ },
+ "deleted2": {
+ "lastKey": "31",
+ "containers": [
+ {
+ "containerId": 21,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 22,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 23,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 24,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 25,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 26,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 27,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 28,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 29,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 30,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ }
+ ]
+ },
+ "deleted3": {
+ "lastKey": "41",
+ "containers": [
+ {
+ "containerId": 31,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ },
+ {
+ "containerId": 32,
+ "numberOfKeys": 2,
+ "pipelines": [
+ {
+ "id": {
+ "id": "1202e6bb-b7c1-4a85-8067-61374b069adb"
+ },
+ "replicationConfig": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ },
+ "healthy": true
+ }
+ ]
+ }
+ ]
+ },
+ "deleted4": {
+ "lastKey": null,
+ "containers": []
+ }
}
\ No newline at end of file
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
index cc2a1b66cf..d7efeea053 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
@@ -28,5 +28,44 @@
"/heatmap/readaccess?startDate=*&path=*&entityType=bucket": "/bucketHeatmap",
"/heatmap/readaccess?startDate=*&path=*&entityType=key": "/keyHeatmap",
"/heatmap/readaccess?startDate=*&path=*&entityType=volume": "/heatmap",
- "/features/disabledFeatures": "/disabledFeatures"
+ "/features/disabledFeatures": "/disabledFeatures",
+ "/keys/open?limit=0": "/keysOpenSummary",
+ "/keys/deletePending?limit=1": "/keysdeletePendingSummary",
+
+ "/containers/mismatch?limit=*&prevKey=11&missingIn=OM" : "/omMismatch1",
+ "/containers/mismatch?limit=*&prevKey=21&missingIn=OM" : "/omMismatch2",
+ "/containers/mismatch?limit=*&prevKey=31&missingIn=OM" : "/omMismatch3",
+ "/containers/mismatch?limit=*&prevKey=41&missingIn=OM" : "/omMismatch4",
+
+ "/containers/mismatch?limit=*&prevKey=*&missingIn=OM" : "/omMismatch",
+
+ "/containers/mismatch?limit=*&prevKey=11&missingIn=SCM" : "/scmMismatch1",
+ "/containers/mismatch?limit=*&prevKey=21&missingIn=SCM" : "/scmMismatch2",
+ "/containers/mismatch?limit=*&prevKey=31&missingIn=SCM" : "/scmMismatch3",
+ "/containers/mismatch?limit=*&prevKey=41&missingIn=SCM" : "/scmMismatch4",
+ "/containers/mismatch?limit=*&prevKey=51&missingIn=SCM" : "/scmMismatch5",
+
+ "/containers/mismatch?limit=*&prevKey=*&missingIn=SCM" : "/scmMismatch",
+
+ "/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey": "/nonFSO",
+
"/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/1105696238501917":
"/nonFSO1",
+ "/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=21":
"/nonFSO2",
+ "/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=31":
"/nonFSO3",
+
+
+ "/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey": "/fso",
+
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713":
"/fso1",
+
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191713":
"/fso2",
+
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2431/110569623850191713":
"/fso3",
+
+ "/keys/deletePending?limit=*&prevKey" : "/keydeletePending",
+
"/keys/deletePending?limit=*&prevKey=/volume/bucket1/rcmeevblsf/106/-9223372036843950335"
: "/keydeletePending1",
+
"/keys/deletePending?limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191"
: "/keydeletePending2",
+ "/keys/deletePending?limit=*&prevKey=31" : "/keydeletePending3",
+
+ "/containers/mismatch/deleted?limit=*&prevKey": "/deleted",
+ "/containers/mismatch/deleted?limit=*&prevKey=11": "/deleted1",
+ "/containers/mismatch/deleted?limit=*&prevKey=21": "/deleted2",
+ "/containers/mismatch/deleted?limit=*&prevKey=31": "/deleted3",
+ "/containers/mismatch/deleted?limit=*&prevKey=41": "/deleted4"
}
\ No newline at end of file
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.less
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.less
index b1570b63ea..28978baaf9 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.less
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.less
@@ -48,6 +48,14 @@
border-right: 5px solid #1DA57A;
}
}
+ .ant-menu-sub{
+ background-color: #0a2542;
+ color: #FFF;
+ &::after {
+ border-right: 5px solid #1DA57A;
+ color: #FFF;
+ }
+ }
}
}
}
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.tsx
index d51afb60a4..afa52df7ac 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/navBar/navBar.tsx
@@ -117,11 +117,23 @@ class NavBar extends React.Component<INavBarProps> {
<span>Containers</span>
<Link to='/Containers'/>
</Menu.Item>
- <Menu.Item key='/Insights'>
- <Icon type='bar-chart'/>
- <span>Insights</span>
- <Link to='/Insights'/>
- </Menu.Item>
+ <Menu.SubMenu
+ title={
+ <span><Icon type='bar-chart' />
+ <span>Insights</span>
+ </span>
+ }>
+ <Menu.Item key="/Insights">
+ <span><Icon type='bar-chart' /></span>
+ <span>Insights</span>
+ <Link to='/Insights' />
+ </Menu.Item>
+ <Menu.Item key="/Om">
+ <span> <Icon type="database"/></span>
+ <span>OM DB Insights</span>
+ <Link to='/Om' />
+ </Menu.Item>
+ </Menu.SubMenu>
<Menu.Item key='/DiskUsage'>
<Icon type='pie-chart'/>
<span>Disk Usage</span>
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/constants/breadcrumbs.constants.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/constants/breadcrumbs.constants.tsx
index 7f6d6fd03c..a7633fb521 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/constants/breadcrumbs.constants.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/constants/breadcrumbs.constants.tsx
@@ -27,5 +27,6 @@ export const breadcrumbNameMap: IBreadcrumbNameMap = {
'/MissingContainers': 'Missing Containers',
'/Insights': 'Insights',
'/DiskUsage': 'Disk Usage',
- '/Heatmap': 'Heatmap'
+ '/Heatmap': 'Heatmap',
+ '/Om':'Om',
};
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/routes.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/routes.tsx
index fa53d24775..fe991e052a 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/routes.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/routes.tsx
@@ -23,6 +23,8 @@ import {NotFound} from './views/notFound/notFound';
import {IRoute} from './types/routes.types';
import {MissingContainers} from './views/missingContainers/missingContainers';
import {Insights} from './views/insights/insights';
+import {Om} from './views/insights/om/om';
+
import {DiskUsage} from './views/diskUsage/diskUsage';
import {Heatmap} from './views/heatMap/heatmap';
@@ -43,6 +45,10 @@ export const routes: IRoute[] = [
path: '/Insights',
component: Insights
},
+ {
+ path: '/Om',
+ component: Om
+ },
{
path: '/MissingContainers',
component: MissingContainers
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.less
similarity index 62%
copy from
hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
copy to
hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.less
index 3433707894..15d68dfc86 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.less
@@ -16,15 +16,12 @@
* limitations under the License.
*/
-.overview-content {
- margin: 0 5px 20px;
- .icon-small {
- font-size: 16px;
+.ant-pagination-disabled a, .ant-pagination-disabled:hover a,
.ant-pagination-disabled:focus a, .ant-pagination-disabled
.ant-pagination-item-link, .ant-pagination-disabled:hover
.ant-pagination-item-link, .ant-pagination-disabled:focus
.ant-pagination-item-link {
+ color: rgba(0, 0, 0, 0.65);
+ cursor: pointer !important;
}
- .meta {
- font-size: 12px;
- }
- .padded-text {
- padding-left: 5px;
- }
-}
+
+ .ant-pagination-disabled, .ant-pagination-disabled:hover,
.ant-pagination-disabled:focus {
+ color: rgba(0, 0, 0, 0.65);
+ cursor: pointer !important;
+ }
\ No newline at end of file
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
new file mode 100644
index 0000000000..9b8e129791
--- /dev/null
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
@@ -0,0 +1,1042 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from 'react';
+import axios from 'axios';
+import { Table, Tabs, Menu, Dropdown, Icon, Tooltip } from 'antd';
+import { PaginationConfig } from 'antd/lib/pagination';
+import filesize from 'filesize';
+import moment from 'moment';
+import { showDataFetchError, byteToSize } from 'utils/common';
+import './om.less';
+import { ColumnSearch } from 'utils/columnSearch';
+import { Link } from 'react-router-dom';
+
+
+const size = filesize.partial({ standard: 'iec' });
+const { TabPane } = Tabs;
+//Previous Key Need to store respective Lastkey of each API
+let mismatchPrevKeyList = [0];
+let openPrevKeyList =[""];
+let keysPendingPrevList =[""];
+let deletedKeysPrevList =[0];
+let keysPendingExpanded: any = [];
+interface IContainerResponse {
+ containerId: number;
+ mismatchMissingState: string;
+ OMContainerState: string;
+ SCMContainerState: string;
+ existsAt: string;
+ pipelines: string[];
+ numberOfKeys: number;
+}
+
+interface IKeyLevelResponse {
+ path: string;
+ keyState: string;
+ inStateSince: number;
+ size: number;
+ replicatedSize: number;
+ unreplicatedSize: number;
+ replicationType: string;
+}
+
+interface IDeleteKeyResponse {
+ objectID: number;
+ updateID: number;
+ parentObjectID: number;
+ volumeName: string;
+ bucketName: string;
+ keyName: string;
+ dataSize: number;
+ path: string;
+ replicatedTotal: number;
+ unreplicatedTotal: number;
+ omKeyInfoList: IDeleteKeyResponse[];
+}
+
+interface IContainersResponse {
+ containers: IContainerResponse[];
+}
+
+interface IKeysResponse {
+ entities: IKeyLevelResponse[];
+}
+interface IDeleteKeysResponse {
+ deletedkeyinfo: IDeleteKeyResponse[];
+}
+
+interface IKeyResponse {
+ Volume: string;
+ Bucket: string;
+ Key: string;
+ DataSize: number;
+ Versions: number[];
+ Blocks: object;
+ CreationTime: string;
+ ModificationTime: string;
+}
+
+interface IContainerKeysResponse {
+ totalCount: number;
+ keys: IKeyResponse[];
+}
+
+const KEY_TABLE_COLUMNS = [
+ {
+ title: 'Volume',
+ dataIndex: 'Volume',
+ key: 'Volume'
+ },
+ {
+ title: 'Bucket',
+ dataIndex: 'Bucket',
+ key: 'Bucket'
+ },
+ {
+ title: 'Key',
+ dataIndex: 'Key',
+ key: 'Key'
+ },
+ {
+ title: 'Size',
+ dataIndex: 'DataSize',
+ key: 'DataSize',
+ render: (dataSize: number) => <div>{size(dataSize)}</div>
+ },
+ {
+ title: 'Date Created',
+ dataIndex: 'CreationTime',
+ key: 'CreationTime',
+ render: (date: string) => moment(date).format('lll')
+ },
+ {
+ title: 'Date Modified',
+ dataIndex: 'ModificationTime',
+ key: 'ModificationTime',
+ render: (date: string) => moment(date).format('lll')
+ }
+];
+
+const MISMATCH_TAB_COLUMNS = [
+ {
+ title: 'Container ID',
+ dataIndex: 'containerId',
+ key: 'containerId',
+ width: '20%',
+ isSearchable: true,
+
+ },
+ {
+ title: 'Count Of Keys',
+ dataIndex: 'numberOfKeys',
+ key: 'numberOfKeys',
+ sorter: (a: IContainerResponse, b: IContainerResponse) => a.numberOfKeys -
b.numberOfKeys
+ },
+ {
+ title: 'Pipelines',
+ dataIndex: 'pipelines',
+ key: 'pipelines',
+ render: (pipelines: any) => (
+ <div>
+ {pipelines && pipelines.map(pipeline => (
+ <div key={pipeline.id.id}>
+ {pipeline.id.id}
+ </div>
+ ))}
+ </div>
+ )
+ }
+];
+
+const OPEN_KEY_TAB_COLUMNS = [
+ {
+ title: 'Key',
+ dataIndex: 'path',
+ key: 'path',
+ isSearchable: true
+ },
+ {
+ title: 'Amount of data',
+ dataIndex: 'size',
+ key: 'size',
+ render: (size :any) => size = byteToSize(size,1)
+ },
+ {
+ title: 'Path',
+ dataIndex: 'key',
+ key: 'key',
+ width: '270px'
+ },
+ {
+ title: 'In state since',
+ dataIndex: 'inStateSince',
+ key: 'inStateSince',
+ render: (inStateSince: number) => {
+ return inStateSince > 0 ? moment(inStateSince).format('ll LTS') : 'NA';
+ }
+ },
+ {
+ title: 'Replication Factor',
+ dataIndex: 'replicationInfo',
+ key: 'replicationfactor',
+ render: (replicationInfo: any) => (
+ <div>
+ {
+ <div >
+ {Object.values(replicationInfo)[0]}
+ </div>
+ }
+ </div>
+ )
+ },
+ {
+ title: 'Replication Type',
+ dataIndex: 'replicationInfo',
+ key: 'replicationtype',
+ render: (replicationInfo: any) => (
+ <div>
+ {
+ <div >
+ {Object.values(replicationInfo)[2]}
+ </div>
+ }
+ </div>
+ )
+ }
+
+];
+
+const PENDING_TAB_COLUMNS = [
+ {
+ title: 'Key Name',
+ dataIndex: 'fileName',
+ key: 'fileName'
+ },
+ {
+ title: 'Path',
+ dataIndex: 'keyName',
+ key: 'keyName',
+ isSearchable: true,
+ },
+ {
+ title: 'Total Data Size',
+ dataIndex: 'dataSize',
+ key: 'dataSize',
+ render: (dataSize :any) => dataSize = byteToSize(dataSize,1)
+ },
+ {
+ title: 'Total Key Count',
+ dataIndex: 'keyCount',
+ key: 'keyCount',
+ }
+];
+
+const DELETED_TAB_COLUMNS = [
+ {
+ title: 'Container ID',
+ dataIndex: 'containerId',
+ key: 'containerId',
+ width: '20%',
+ isSearchable: true
+ },
+ {
+ title: 'Count Of Keys',
+ dataIndex: 'numberOfKeys',
+ key: 'numberOfKeys',
+ sorter: (a: IContainerResponse, b: IContainerResponse) => a.numberOfKeys -
b.numberOfKeys
+ },
+ {
+ title: 'Pipelines',
+ dataIndex: 'pipelines',
+ key: 'pipelines',
+ render: (pipelines: any) => (
+ <div>
+ {pipelines && pipelines.map((pipeline:any) => (
+ <div key={pipeline.id.id}>
+ {pipeline.id.id}
+ </div>
+ ))}
+ </div>
+ )
+ }
+];
+
+interface IExpandedRow {
+ [key: number]: IExpandedRowState;
+}
+
+interface IExpandedRowState {
+ containerId: number;
+ loading: boolean;
+ dataSource: IKeyResponse[];
+ totalCount: number;
+}
+
+interface IOmdbInsightsState {
+ loading: boolean;
+ mismatchDataSource: IContainerResponse[];
+ openKeysDataSource: IKeyLevelResponse[];
+ pendingDeleteKeyDataSource: any[];
+ expandedRowData: IExpandedRow;
+ deletedContainerKeysDataSource: [];
+ prevKeyMismatch: number;
+ mismatchMissingState: any;
+ prevKeyOpen: string;
+ prevKeyDeleted: number;
+ prevKeyDeletePending: string;
+ activeTab: string;
+ DEFAULT_LIMIT: number,
+ clickable: boolean;
+ includeFso: boolean;
+ includeNonFso: boolean;
+ prevClickable :boolean
+}
+
+export class Om extends React.Component<Record<string, object>,
IOmdbInsightsState> {
+
+ constructor(props = {}) {
+ super(props);
+ this.addexistAtColumn();
+ this.addfsoNonfsoKeyColumn();
+ this.state = {
+ loading: false,
+ mismatchDataSource: [],
+ openKeysDataSource: [],
+ pendingDeleteKeyDataSource: [],
+ deletedContainerKeysDataSource: [],
+ prevKeyMismatch: 0,
+ mismatchMissingState: 'SCM',
+ prevKeyOpen: "",
+ prevKeyDeletePending: "",
+ prevKeyDeleted: 0,
+ expandedRowData: {},
+ activeTab: '1',
+ DEFAULT_LIMIT: 10,
+ clickable: true,
+ includeFso: true,
+ includeNonFso: false,
+ prevClickable:false
+ };
+ }
+
+ addexistAtColumn = () => {
+ // Inside the class component to access the React internal state
+ const existsAtColumn = {
+ title: <span>
+ <Dropdown overlay={this.existAtScmOmMenu} >
+ <label> Exists at
+ <Icon type="funnel-plot" theme="filled"
/>
+ </label>
+ </Dropdown>
+ <label>
+ <Tooltip placement='top' title={<span>{'SCM: Container exist at SCM
but missing at OM.'}<br />
+ {'OM: Container exist at OM but missing at SCM.'}</span>}>
+ <Icon type='info-circle' />
+ </Tooltip>
+ </label>
+ </span>,
+ dataIndex: 'existsAt',
+ key: 'existsAt',
+ isVisible: true,
+ render: (existsAt: any) => {
+ return (
+ <div key={existsAt}>
+ {existsAt}
+ </div>
+
+ );
+ }
+ }
+ if (MISMATCH_TAB_COLUMNS.length > 0 &&
MISMATCH_TAB_COLUMNS[MISMATCH_TAB_COLUMNS.length - 1].key !== 'existsAt') {
+ MISMATCH_TAB_COLUMNS.push(existsAtColumn);
+ }
+ };
+
+ existAtScmOmMenu = () => (
+ <Menu
+ onClick={e => this.handleExistsAtChange(e)}>
+ <Menu.Item key='OM'>
+ OM
+ </Menu.Item>
+ <Menu.Item key='SCM'>
+ SCM
+ </Menu.Item>
+ </Menu>
+ );
+
+ handleExistsAtChange = (e: any) => {
+ console.log("handleExistsAtChange", e.key);
+ if (e.key === 'OM') {
+ mismatchPrevKeyList = [0];
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT, 0, 'SCM');
+ }
+ else {
+ mismatchPrevKeyList = [0];
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT, 0, 'OM');
+ }
+ };
+
+ addfsoNonfsoKeyColumn = () => {
+ // Inside the class component to access the React internal state
+ const fsoNonfsoColumn = {
+ title: <span>
+ <Dropdown overlay={this.fsoNonfsoMenu} >
+ <label> Type
+ <Icon type="funnel-plot" theme="filled" />
+ </label>
+ </Dropdown></span>,
+ dataIndex: 'type',
+ key: 'type',
+ isVisible: true,
+
+ render: (type: any) => {
+ return (
+ <div key={type}>
+ {type}
+ </div>
+ );
+ }
+ }
+ if (OPEN_KEY_TAB_COLUMNS.length > 0 &&
OPEN_KEY_TAB_COLUMNS[OPEN_KEY_TAB_COLUMNS.length - 1].key !== 'type') {
+ OPEN_KEY_TAB_COLUMNS.push(fsoNonfsoColumn);
+ }
+ };
+
+ fsoNonfsoMenu = () => (
+ <Menu
+ defaultSelectedKeys={['OM']}
+ onClick={e => this.handlefsoNonfsoMenuChange(e)}>
+ <Menu.Item key='fso'>
+ FSO
+ </Menu.Item>
+ <Menu.Item key='nonFso'>
+ Non FSO
+ </Menu.Item>
+ </Menu>
+ );
+
+ handlefsoNonfsoMenuChange = (e: any) => {
+ console.log("handlefsoNonfsoMenuChange", e.key);
+ if (e.key === 'fso') {
+ openPrevKeyList =[""];
+ this.fetchOpenKeys(true, false, this.state.DEFAULT_LIMIT, "");
+ }
+ else {
+ openPrevKeyList = [""];
+ this.fetchOpenKeys(false, true, this.state.DEFAULT_LIMIT, "");
+ }
+ };
+
+ componentDidMount(): void {
+ // Fetch mismatch containers on component mount
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,
this.state.prevKeyMismatch, this.state.mismatchMissingState);
+ };
+
+ fetchMismatchContainers = (limit: number, prevKeyMismatch: number,
mismatchMissingState: any) => {
+ this.setState({
+ loading: true,
+ clickable: true,
+ prevClickable: true
+ });
+ const mismatchEndpoint =
`/api/v1/containers/mismatch?limit=${limit}&prevKey=${prevKeyMismatch}&missingIn=${mismatchMissingState}`
+ axios.get(mismatchEndpoint).then(mismatchContainersResponse => {
+ const mismatchContainers: IContainerResponse[] =
mismatchContainersResponse && mismatchContainersResponse.data &&
mismatchContainersResponse.data.containerDiscrepancyInfo;
+ if (mismatchContainersResponse && mismatchContainersResponse.data &&
mismatchContainersResponse.data.lastKey === null) {
+ //No Further Records may be last record
+ mismatchPrevKeyList = [0];
+ this.setState({
+ loading: false,
+ clickable: false,
+ mismatchDataSource: mismatchContainers,
+ expandedRowData: {},
+ })
+ }
+ else {
+ if (this.state.prevKeyMismatch === 0 ){
+ this.setState({
+ prevClickable: false
+ })
+ }
+ if
(mismatchPrevKeyList.includes(mismatchContainersResponse.data.lastKey) ===
false) {
+ mismatchPrevKeyList.push(mismatchContainersResponse.data.lastKey);
+ }
+ this.setState({
+ loading: false,
+ prevKeyMismatch: mismatchContainersResponse &&
mismatchContainersResponse.data && mismatchContainersResponse.data.lastKey,
+ mismatchDataSource: mismatchContainers,
+ });
+ }
+ }).catch(error => {
+ this.setState({
+ loading: false,
+ });
+ showDataFetchError(error.toString());
+ });
+ };
+
+ fetchOpenKeys = (includeFso: boolean, includeNonFso: boolean, limit: number,
prevKeyOpen: string) => {
+ this.setState({
+ loading: true,
+ clickable: true,
+ prevClickable:true
+ });
+
+ let openKeysEndpoint;
+ if (prevKeyOpen === "") {
+ openKeysEndpoint =
`/api/v1/keys/open?includeFso=${includeFso}&includeNonFso=${includeNonFso}&limit=${limit}&prevKey`;
+ }
+ else {
+ openKeysEndpoint =
`/api/v1/keys/open?includeFso=${includeFso}&includeNonFso=${includeNonFso}&limit=${limit}&prevKey=${prevKeyOpen}`;
+ }
+
+ axios.get(openKeysEndpoint).then(openKeysResponse => {
+ const openKeys = openKeysResponse && openKeysResponse.data;
+ let allopenKeysResponse: any[] = [];
+ for (let key in openKeys) {
+ if (Array.isArray(openKeys[key])) {
+ openKeys[key] && openKeys[key].map((item: any) =>
(allopenKeysResponse.push({ ...item, type: key })));
+ }
+ }
+
+ if (openKeysResponse && openKeysResponse.data &&
openKeysResponse.data.lastKey === "") {
+ //last key of api is null may be last record no further records
+ openPrevKeyList = [""];
+ this.setState({
+ loading: false,
+ clickable: false,
+ openKeysDataSource: allopenKeysResponse
+ })
+ }
+ else {
+ if (this.state.prevKeyOpen === "" ){
+ this.setState({
+ prevClickable: false
+ })
+ }
+ if (openPrevKeyList.includes(openKeysResponse.data.lastKey) === false)
{
+ openPrevKeyList.push(openKeysResponse.data.lastKey);
+ }
+ this.setState({
+ loading: false,
+ prevKeyOpen: openKeysResponse && openKeysResponse.data &&
openKeysResponse.data.lastKey,
+ openKeysDataSource: allopenKeysResponse,
+ })
+ };
+ }).catch(error => {
+ this.setState({
+ loading: false
+ });
+ showDataFetchError(error.toString());
+ });
+
+ };
+
+ fetchDeletePendingKeys = (limit: number, prevKeyDeletePending: string) => {
+ this.setState({
+ loading: true,
+ clickable: true,
+ prevClickable :true
+ });
+ keysPendingExpanded =[];
+ let deletePendingKeysEndpoint;
+ if (prevKeyDeletePending === "" || prevKeyDeletePending === undefined ) {
+ deletePendingKeysEndpoint =
`/api/v1/keys/deletePending?limit=${limit}&prevKey`;
+ }
+ else {
+ deletePendingKeysEndpoint =
`/api/v1/keys/deletePending?limit=${limit}&prevKey=${prevKeyDeletePending}`;
+ }
+ axios.get(deletePendingKeysEndpoint).then(deletePendingKeysResponse => {
+ const deletePendingKeys = deletePendingKeysResponse &&
deletePendingKeysResponse.data && deletePendingKeysResponse.data.deletedKeyInfo;
+ //Use Summation Logic iterate through all object and find sum of all
datasize
+ let deletedKeyInfoData = [];
+ deletedKeyInfoData = deletePendingKeys &&
deletePendingKeys.flatMap((infoObject:any) => {
+ const { omKeyInfoList } = infoObject;
+ keysPendingExpanded.push(infoObject);
+ let count = 0;
+ let item = omKeyInfoList && omKeyInfoList.reduce((obj:any, item:any)
=> {
+ const { dataSize } = item;
+ const newDataSize = obj.dataSize + dataSize;
+ count = count + 1;
+ return { ...item, dataSize: newDataSize };
+ }, { "dataSize": 0 });
+
+ return {
+ "dataSize": item.dataSize,
+ "fileName":item.fileName,
+ "keyName": item.keyName,
+ "path": item.path,
+ "keyCount": count
+ }
+ });
+
+ if (deletePendingKeysResponse && deletePendingKeysResponse.data &&
deletePendingKeysResponse.data.lastKey === "") {
+ //last key of api is empty may be last record no further records
+ keysPendingPrevList =[""];
+ this.setState({
+ loading: false,
+ clickable: false,
+ pendingDeleteKeyDataSource: deletedKeyInfoData
+ })
+ }
+ else {
+ if (this.state.prevKeyDeletePending === ""
||this.state.prevKeyDeletePending === undefined ){
+ this.setState({
+ prevClickable: false
+ })
+ }
+ if
(keysPendingPrevList.includes(deletePendingKeysResponse.data.lastKey) ===
false) {
+ keysPendingPrevList.push(deletePendingKeysResponse.data.lastKey);
+ }
+ this.setState({
+ loading: false,
+ prevKeyDeletePending: deletePendingKeysResponse &&
deletePendingKeysResponse.data && deletePendingKeysResponse.data.lastKey,
+ pendingDeleteKeyDataSource: deletedKeyInfoData
+ });
+ }
+ }).catch(error => {
+ this.setState({
+ loading: false,
+ });
+ showDataFetchError(error.toString());
+ });
+ };
+
+ expandedKey = ( record:any)=> {
+ const filteredData = keysPendingExpanded &&
keysPendingExpanded.flatMap((info:any) =>
+ info.omKeyInfoList && info.omKeyInfoList.filter((item: any) =>
item.keyName === record.keyName)
+ )
+ const columns= [{
+ title: 'Data Size',
+ dataIndex: 'dataSize',
+ key: 'dataSize',
+ render: (dataSize :any) => dataSize = dataSize > 0 ?
byteToSize(dataSize,1) : dataSize
+ },
+ {
+ title: 'Replicated Data Size',
+ dataIndex: 'replicatedSize',
+ key: 'replicatedSize',
+ render: (replicatedSize :any) => replicatedSize = replicatedSize > 0 ?
byteToSize(replicatedSize,1) : replicatedSize
+ },
+ {
+ title: 'Creation Time',
+ dataIndex: 'creationTime',
+ key: 'creationTime',
+ render: (creationTime: number) => {
+ return creationTime > 0 ? moment(creationTime).format('ll LTS') : 'NA';
+ }
+ },
+ {
+ title: 'Modification Time',
+ dataIndex: 'modificationTime',
+ key: 'modificationTime',
+ render: (modificationTime: number) => {
+ return modificationTime > 0 ? moment(modificationTime).format('ll
LTS') : 'NA';
+ }
+ }
+ ]
+ return (
+ <Table
+ columns={columns}
+ dataSource={filteredData}
+ pagination={true}
+ rowKey='dataSize'
+ />
+ );
+ }
+
+ fetchDeletedKeys = (limit: number, prevKeyDeleted: number) => {
+ this.setState({
+ loading: true,
+ clickable: true,
+ prevClickable: true
+ });
+ const deletedKeysEndpoint =
`/api/v1/containers/mismatch/deleted?limit=${limit}&prevKey=${prevKeyDeleted}`;
+ axios.get(deletedKeysEndpoint).then(deletedKeysResponse => {
+ let deletedContainerKeys = [];
+ deletedContainerKeys = deletedKeysResponse && deletedKeysResponse.data
&& deletedKeysResponse.data.containers;
+ if (deletedKeysResponse && deletedKeysResponse.data &&
deletedKeysResponse.data.lastKey === null) {
+ // no more further records last key
+ deletedKeysPrevList = [0];
+ this.setState({
+ loading: false,
+ clickable: false,
+ deletedContainerKeysDataSource: deletedContainerKeys,
+ expandedRowData: {},
+ })
+ }
+ else {
+ if (this.state.prevKeyDeleted === 0 ){
+ this.setState({
+ prevClickable: false
+ })
+ }
+ if (deletedKeysPrevList.includes(deletedKeysResponse.data.lastKey) ===
false) {
+ deletedKeysPrevList.push(deletedKeysResponse.data.lastKey);
+ }
+ this.setState({
+ loading: false,
+ prevKeyDeleted: deletedKeysResponse && deletedKeysResponse.data &&
deletedKeysResponse.data.lastKey,
+ deletedContainerKeysDataSource: deletedContainerKeys
+ })
+ };
+ }).catch(error => {
+ this.setState({
+ loading: false
+ });
+ showDataFetchError(error.toString());
+ });
+ };
+
+ changeTab = (activeKey: any) => {
+ //when changing tab make empty all datasets and prevkey and deafult
filtering to intial values
+ mismatchPrevKeyList = [0];
+ openPrevKeyList =[""];
+ keysPendingPrevList =[""];
+ deletedKeysPrevList =[0];
+ this.setState({
+ activeTab: activeKey,
+ mismatchDataSource: [],
+ openKeysDataSource: [],
+ pendingDeleteKeyDataSource: [],
+ deletedContainerKeysDataSource: [],
+ expandedRowData: {},
+ prevKeyOpen: "",
+ prevKeyDeletePending: "",
+ prevKeyDeleted: 0,
+ prevKeyMismatch: 0,
+ mismatchMissingState: 'SCM',
+ includeFso: true,
+ includeNonFso: false,
+ DEFAULT_LIMIT: 10,
+
+ }, () => {
+ if (activeKey === '2') {
+ this.fetchOpenKeys(this.state.includeFso, this.state.includeNonFso,
this.state.DEFAULT_LIMIT, this.state.prevKeyOpen);
+ } else if (activeKey === '3') {
+ keysPendingExpanded =[];
+ this.fetchDeletePendingKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeletePending);
+ } else if (activeKey === '4') {
+ this.fetchDeletedKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeleted);
+ }
+ else {
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,
this.state.prevKeyMismatch, this.state.mismatchMissingState);
+ }
+ })
+ };
+
+ fetchPreviousRecords = () => {
+ // to fetch previous call stored all prevkey in array and fetching in
respective tabs
+ if (this.state.activeTab === '2') {
+ this.setState({
+ prevKeyOpen:
openPrevKeyList[openPrevKeyList.indexOf(this.state.prevKeyOpen)-2]
+ }, () => {
+ this.fetchOpenKeys(this.state.includeFso, this.state.includeNonFso,
this.state.DEFAULT_LIMIT,this.state.prevKeyOpen);
+ })
+ } else if (this.state.activeTab === '3') {
+ this.setState({
+ prevKeyDeletePending:
keysPendingPrevList[keysPendingPrevList.indexOf(this.state.prevKeyDeletePending)-2]
+ }, () => {
+ this.fetchDeletePendingKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeletePending);
+ })
+ } else if (this.state.activeTab === '4') {
+ this.setState({
+ prevKeyDeleted:
deletedKeysPrevList[deletedKeysPrevList.indexOf(this.state.prevKeyDeleted)-2]
+ }, () => {
+
this.fetchDeletedKeys(this.state.DEFAULT_LIMIT,this.state.prevKeyDeleted);
+ })
+ }
+ else {
+ this.setState({
+ prevKeyMismatch:
mismatchPrevKeyList[mismatchPrevKeyList.indexOf(this.state.prevKeyMismatch)-2]
+ }, () => {
+
this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,this.state.prevKeyMismatch,
this.state.mismatchMissingState);
+ })
+ }
+ };
+
+ fetchNextRecords = () => {
+ // To Call API for Page Level for each page fetch next records
+ if (this.state.activeTab === '2') {
+ this.fetchOpenKeys(this.state.includeFso, this.state.includeNonFso,
this.state.DEFAULT_LIMIT, this.state.prevKeyOpen);
+ } else if (this.state.activeTab === '3') {
+ this.fetchDeletePendingKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeletePending);
+ } else if (this.state.activeTab === '4') {
+ this.fetchDeletedKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeleted);
+ }
+ else {
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,
this.state.prevKeyMismatch, this.state.mismatchMissingState);
+ }
+ };
+
+ itemRender = (_: any, type: string, originalElement: any) => {
+ if (type === 'prev') {
+ return <div>{this.state.prevClickable ? <Link to="/Om"
onClick={this.fetchPreviousRecords}> Prev</Link>: <Link to="/Om" style={{
pointerEvents: 'none' }}>No Records</Link>}</div>;
+ }
+ if (type === 'next') {
+ return <div> {this.state.clickable ? <Link to="/Om"
onClick={this.fetchNextRecords}> {'>>'} </Link> : <Link to="/Om" style={{
pointerEvents: 'none' }}>No More Further Records</Link>}</div>;
+ }
+ return originalElement;
+ };
+
+ onShowSizeChange = (current: number, pageSize: number) => {
+ console.log("onShowSizeChange",pageSize, this.state);
+ console.log("Open Keys Array", keysPendingPrevList);
+ if (this.state.activeTab === '2') {
+ //open keys
+ this.setState({
+ DEFAULT_LIMIT: pageSize,
+ prevKeyOpen:
openPrevKeyList[openPrevKeyList.indexOf(this.state.prevKeyOpen)-1]
+ }, () => {
+ this.fetchOpenKeys(this.state.includeFso, this.state.includeNonFso,
this.state.DEFAULT_LIMIT,this.state.prevKeyOpen);
+ });
+ }
+ else if (this.state.activeTab === '3') {
+ //keys pending for deletion
+ this.setState({
+ DEFAULT_LIMIT: pageSize,
+ prevKeyDeletePending:
keysPendingPrevList[keysPendingPrevList.indexOf(this.state.prevKeyDeletePending)-1]
+ }, () => {
+ this.fetchDeletePendingKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeletePending);
+ })
+ }
+ else if (this.state.activeTab === '4') {
+ //deleted container keys
+ this.setState({
+ DEFAULT_LIMIT: pageSize,
+ prevKeyDeleted:
deletedKeysPrevList[deletedKeysPrevList.indexOf(this.state.prevKeyDeleted)-1]
+ }, () => {
+ this.fetchDeletedKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeleted);
+ })
+ }
+ else {
+ // active tab 1 for mismatch
+ this.setState({
+ DEFAULT_LIMIT: pageSize,
+ prevKeyMismatch:
mismatchPrevKeyList[mismatchPrevKeyList.indexOf(this.state.prevKeyMismatch)-1]
+ }, () => {
+
this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,this.state.prevKeyMismatch,
this.state.mismatchMissingState);
+ });
+ }
+ };
+
+ onRowExpandClick = (expanded: boolean, record: IContainerResponse) => {
+ if (expanded) {
+ this.setState(({ expandedRowData }) => {
+ const expandedRowState: IExpandedRowState =
expandedRowData[record.containerId] ?
+ Object.assign({}, expandedRowData[record.containerId], { loading:
true }) :
+ { containerId: record.containerId, loading: true, dataSource: [],
totalCount: 0 };
+ return {
+ expandedRowData: Object.assign({}, expandedRowData, {
[record.containerId]: expandedRowState })
+ };
+ });
+ axios.get(`/api/v1/containers/${record.containerId}/keys`).then(response
=> {
+ const containerKeysResponse: IContainerKeysResponse = response.data;
+ this.setState(({ expandedRowData }) => {
+ const expandedRowState: IExpandedRowState =
+ Object.assign({}, expandedRowData[record.containerId],
+ { loading: false, dataSource: containerKeysResponse.keys,
totalCount: containerKeysResponse.totalCount });
+ return {
+ expandedRowData: Object.assign({}, expandedRowData, {
[record.containerId]: expandedRowState })
+ };
+ });
+ }).catch(error => {
+ this.setState(({ expandedRowData }) => {
+ const expandedRowState: IExpandedRowState =
+ Object.assign({}, expandedRowData[record.containerId],
+ { loading: false });
+ return {
+ expandedRowData: Object.assign({}, expandedRowData, {
[record.containerId]: expandedRowState })
+ };
+ });
+ showDataFetchError(error.toString());
+ });
+ }
+ };
+
+ expandedRowRender = (record: IContainerResponse) => {
+ const { expandedRowData } = this.state;
+ const containerId = record.containerId;
+ if (expandedRowData[containerId]) {
+ const containerKeys: IExpandedRowState = expandedRowData[containerId];
+ const dataSource = containerKeys && containerKeys.dataSource &&
containerKeys.dataSource.map(record => (
+ { ...record, uid: `${record.Volume}/${record.Bucket}/${record.Key}` }
+ ));
+ const paginationConfig: PaginationConfig = {
+ showTotal: (total: number, range) => `${range[0]}-${range[1]} of
${total} keys`
+ };
+ return (
+ <Table
+ loading={containerKeys.loading} dataSource={dataSource}
+ columns={KEY_TABLE_COLUMNS} pagination={paginationConfig}
+ rowKey='uid' />
+ );
+ }
+ return <div>Loading...</div>;
+ };
+
+ searchMismatchColumn = () => {
+ return MISMATCH_TAB_COLUMNS.reduce<any[]>((filtered, column) => {
+ if (column.isSearchable) {
+ const newColumn = {
+ ...column,
+ ...new ColumnSearch(column).getColumnSearchProps(column.dataIndex)
+ };
+ filtered.push(newColumn);
+ } else {
+ filtered.push(column);
+ }
+ return filtered;
+ }, [])
+ };
+
+ searchOpenKeyColumn = () => {
+ return OPEN_KEY_TAB_COLUMNS.reduce<any[]>((filtered, column) => {
+ if (column.isSearchable) {
+ const newColumn = {
+ ...column,
+ ...new ColumnSearch(column).getColumnSearchProps(column.dataIndex)
+ };
+ filtered.push(newColumn);
+ } else {
+ filtered.push(column);
+ }
+
+ return filtered;
+ }, [])
+ };
+
+ searchKeysPendingColumn = () => {
+ return PENDING_TAB_COLUMNS.reduce<any[]>((filtered, column) => {
+ if (column.isSearchable) {
+ const newColumn = {
+ ...column,
+ ...new ColumnSearch(column).getColumnSearchProps(column.dataIndex)
+ };
+ filtered.push(newColumn);
+ } else {
+ filtered.push(column);
+ }
+
+ return filtered;
+ }, [])
+ };
+
+ searchDeletedKeyColumn = () => {
+ return DELETED_TAB_COLUMNS.reduce<any[]>((filtered, column) => {
+ if (column.isSearchable) {
+ const newColumn = {
+ ...column,
+ ...new ColumnSearch(column).getColumnSearchProps(column.dataIndex)
+ };
+ filtered.push(newColumn);
+ } else {
+ filtered.push(column);
+ }
+
+ return filtered;
+ }, [])
+ };
+
+ render() {
+ const { mismatchDataSource, loading, openKeysDataSource,
pendingDeleteKeyDataSource, deletedContainerKeysDataSource } = this.state;
+
+ const paginationConfig: PaginationConfig = {
+ pageSize:this.state.DEFAULT_LIMIT,
+ defaultPageSize: this.state.DEFAULT_LIMIT,
+ pageSizeOptions: ['10', '20', '30', '50'],
+ showSizeChanger: true,
+ onShowSizeChange: this.onShowSizeChange,
+ itemRender: this.itemRender
+ };
+
+ const generateMismatchTable = (dataSource: any) => {
+ return <Table
+ expandRowByClick dataSource={dataSource}
+ columns={this.searchMismatchColumn()}
+ loading={loading}
+ pagination={paginationConfig} rowKey='containerId'
+ expandedRowRender={this.expandedRowRender}
onExpand={this.onRowExpandClick} />
+ }
+
+ const generateOpenKeyTable = (dataSource: any) => {
+ return <Table
+ expandRowByClick dataSource={dataSource}
+ columns={this.searchOpenKeyColumn()}
+ loading={loading} rowKey='path'
+ pagination={paginationConfig} />
+ }
+
+ const generateKeysPendingTable = (dataSource: any) => {
+ return <Table
+ expandRowByClick dataSource={dataSource}
+ columns={this.searchKeysPendingColumn()}
+ loading={loading}
+ pagination={paginationConfig} rowKey='keyName'
+ expandedRowRender={this.expandedKey} />
+ }
+
+ const generateDeletedKeysTable = (dataSource: any) => {
+ return <Table
+ expandRowByClick dataSource={dataSource}
+ columns={this.searchDeletedKeyColumn()}
+ loading={loading}
+ pagination={paginationConfig} rowKey='containerId'
+ expandedRowRender={this.expandedRowRender}
onExpand={this.onRowExpandClick}
+ />
+ }
+
+
+
+ return (
+ <div className='missing-containers-container'>
+ <div className='page-header'>
+ OM DB Insights
+ </div>
+ <div className='content-div'>
+ <Tabs defaultActiveKey='1' onChange={this.changeTab}>
+ <TabPane key='1' tab={`Container Mismatch Info`}>
+ {generateMismatchTable(mismatchDataSource)}
+ </TabPane>
+ <TabPane key='2' tab={`Open Keys`}>
+ {generateOpenKeyTable(openKeysDataSource)}
+ </TabPane>
+ <TabPane key='3'
+ tab={<label>Keys Pending for Deletion
+ <Tooltip placement='top' title="Keys that are pending for
deletion.">
+ <Icon type='info-circle' />
+ </Tooltip>
+ </label>
+ }>
+ {generateKeysPendingTable(pendingDeleteKeyDataSource)}
+ </TabPane>
+ <TabPane key='4'
+ tab={<label>Deleted Container Keys
+ <Tooltip placement='top' title={"Keys mapped to Containers in
DELETED state SCM."}>
+ <Icon type='info-circle' />
+ </Tooltip>
+ </label>
+ }>
+ {generateDeletedKeysTable(deletedContainerKeysDataSource)}
+ </TabPane>
+ </Tabs>
+ </div>
+ </div>
+ );
+ }
+}
\ No newline at end of file
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
index 3433707894..e683a7d5d0 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.less
@@ -28,3 +28,9 @@
padding-left: 5px;
}
}
+
+.summary-font{
+ .overview-card .ant-card-meta-detail .ant-card-meta-title {
+ font-size: 17px !important;
+ }
+ }
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
index 8b3e7abaaa..09720fbc22 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
@@ -23,7 +23,7 @@ import axios from 'axios';
import {IStorageReport} from 'types/datanode.types';
import moment from 'moment';
import AutoReloadPanel from 'components/autoReloadPanel/autoReloadPanel';
-import {showDataFetchError} from 'utils/common';
+import {showDataFetchError,byteToSize} from 'utils/common';
import {AutoReloadHelper} from 'utils/autoReloadHelper';
import filesize from 'filesize';
import './overview.less';
@@ -62,6 +62,12 @@ interface IOverviewState {
openContainers: number;
deletedContainers: number;
keysPendingDeletion: number;
+ openSummarytotalUnrepSize: number,
+ openSummarytotalRepSize: number,
+ openSummarytotalOpenKeys: number,
+ deletePendingSummarytotalUnrepSize: number,
+ deletePendingSummarytotalRepSize: number,
+ deletePendingSummarytotalDeletedKeys: number,
}
export class Overview extends React.Component<Record<string, object>,
IOverviewState> {
@@ -90,7 +96,13 @@ export class Overview extends React.Component<Record<string,
object>, IOverviewS
omStatus: '',
openContainers: 0,
deletedContainers: 0,
- keysPendingDeletion: 0
+ keysPendingDeletion: 0,
+ openSummarytotalUnrepSize: 0,
+ openSummarytotalRepSize: 0,
+ openSummarytotalOpenKeys: 0,
+ deletePendingSummarytotalUnrepSize: 0,
+ deletePendingSummarytotalRepSize: 0,
+ deletePendingSummarytotalDeletedKeys: 0
};
this.autoReload = new AutoReloadHelper(this._loadData);
}
@@ -101,8 +113,10 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
});
axios.all([
axios.get('/api/v1/clusterState'),
- axios.get('/api/v1/task/status')
- ]).then(axios.spread((clusterStateResponse, taskstatusResponse) => {
+ axios.get('/api/v1/task/status'),
+ axios.get('/api/v1/keys/open?limit=0'),
+ axios.get('/api/v1/keys/deletePending?limit=1'),
+ ]).then(axios.spread((clusterStateResponse, taskstatusResponse,
openResponse, deletePendingResponse) => {
const clusterState: IClusterStateResponse = clusterStateResponse.data;
const taskStatus = taskstatusResponse.data;
@@ -125,7 +139,13 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
deletedContainers: clusterState.deletedContainers,
lastRefreshed: Number(moment()),
lastUpdatedOMDBDelta: omDBDeltaObject &&
omDBDeltaObject.lastUpdatedTimestamp,
- lastUpdatedOMDBFull: omDBFullObject &&
omDBFullObject.lastUpdatedTimestamp
+ lastUpdatedOMDBFull: omDBFullObject &&
omDBFullObject.lastUpdatedTimestamp,
+ openSummarytotalUnrepSize: openResponse.data &&
openResponse.data.keysSummary &&
openResponse.data.keysSummary.totalUnreplicatedDataSize,
+ openSummarytotalRepSize: openResponse.data &&
openResponse.data.keysSummary &&
openResponse.data.keysSummary.totalReplicatedDataSize,
+ openSummarytotalOpenKeys: openResponse.data &&
openResponse.data.keysSummary && openResponse.data.keysSummary.totalOpenKeys,
+ deletePendingSummarytotalUnrepSize: deletePendingResponse.data &&
deletePendingResponse.data.keysSummary &&
deletePendingResponse.data.keysSummary.totalUnreplicatedDataSize,
+ deletePendingSummarytotalRepSize: deletePendingResponse.data &&
deletePendingResponse.data.keysSummary &&
deletePendingResponse.data.keysSummary.totalReplicatedDataSize,
+ deletePendingSummarytotalDeletedKeys: deletePendingResponse.data &&
deletePendingResponse.data.keysSummary &&
deletePendingResponse.data.keysSummary.totalDeletedKeys
});
})).catch(error => {
this.setState({
@@ -165,14 +185,29 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
}
render() {
- const {loading, datanodes, pipelines, storageReport, containers, volumes,
buckets,
- keys, missingContainersCount, lastRefreshed, lastUpdatedOMDBDelta,
lastUpdatedOMDBFull, omStatus, openContainers, deletedContainers,
keysPendingDeletion} = this.state;
+ const {loading, datanodes, pipelines, storageReport, containers, volumes,
buckets, openSummarytotalUnrepSize, openSummarytotalRepSize,
openSummarytotalOpenKeys,
+
deletePendingSummarytotalUnrepSize,deletePendingSummarytotalRepSize,deletePendingSummarytotalDeletedKeys,keysPendingDeletion,
+ keys, missingContainersCount, lastRefreshed, lastUpdatedOMDBDelta,
lastUpdatedOMDBFull, omStatus, openContainers, deletedContainers } = this.state;
const datanodesElement = (
<span>
<Icon type='check-circle' theme='filled' className='icon-success
icon-small'/> {datanodes} <span className='ant-card-meta-description
meta'>HEALTHY</span>
</span>
);
+ const openSummaryData = (
+ <div>
+ {openSummarytotalRepSize!== undefined ?
byteToSize(openSummarytotalRepSize, 1): '0'} <span
className='ant-card-meta-description meta'>Total Replicated Data Size</span><br
/>
+ {openSummarytotalUnrepSize!== undefined ?
byteToSize(openSummarytotalUnrepSize, 1): '0'} <span
className='ant-card-meta-description meta'>Total UnReplicated Data
Size</span><br />
+ {openSummarytotalOpenKeys !== undefined ? openSummarytotalOpenKeys:
'0'} <span className='ant-card-meta-description meta'>Total Open Keys</span>
+ </div>
+ );
+ const deletePendingSummaryData = (
+ <div>
+ {deletePendingSummarytotalRepSize!== undefined ?
byteToSize(deletePendingSummarytotalRepSize, 1): '0'} <span
className='ant-card-meta-description meta'>Total Replicated Data Size</span><br
/>
+ {deletePendingSummarytotalUnrepSize!== undefined ?
byteToSize(deletePendingSummarytotalUnrepSize,1): '0'} <span
className='ant-card-meta-description meta'>Total UnReplicated Data
Size</span><br />
+ {deletePendingSummarytotalDeletedKeys !== undefined ?
deletePendingSummarytotalDeletedKeys: '0'} <span
className='ant-card-meta-description meta'>Total Pending Delete Keys</span>
+ </div>
+ );
const containersTooltip = missingContainersCount === 1 ? 'container is
missing' : 'containers are missing';
const containersLink = missingContainersCount > 0 ? '/MissingContainers' :
'/Containers';
const duLink = '/DiskUsage';
@@ -241,6 +276,12 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
<Col xs={24} sm={18} md={12} lg={12} xl={6}>
<OverviewCard loading={loading} title='Pending Key Deletions'
data={keysPendingDeletion.toString()} icon='delete' />
</Col>
+ <Col xs={24} sm={18} md={12} lg={12} xl={6} className='summary-font'>
+ <OverviewCard loading={loading} title='Open Keys Summary'
data={openSummaryData} icon='file-text' />
+ </Col>
+ <Col xs={24} sm={18} md={12} lg={12} xl={6} className='summary-font'>
+ <OverviewCard loading={loading} title='Pending Deleted Keys
Summary' data={deletePendingSummaryData} icon='delete' />
+ </Col>
</Row>
</div>
);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]