52c80d652d
When looking at containers and accounts it's sometimes nice to know who they've been replicating with. This patch adds a `--sync|-s` option to swift-{container|account}-info which will also dump the incoming and outgoing sync tables: $ swift-container-info /srv/node3/sdb3/containers/294/624/49b9ff074c502ec5e429e7af99a30624/49b9ff074c502ec5e429e7af99a30624.db -s Path: /AUTH_test/new Account: AUTH_test Container: new Deleted: False Container Hash: 49b9ff074c502ec5e429e7af99a30624 Metadata: Created at: 2022-02-16T05:34:05.988480 (1644989645.98848) Put Timestamp: 2022-02-16T05:34:05.981320 (1644989645.98132) Delete Timestamp: 1970-01-01T00:00:00.000000 (0) Status Timestamp: 2022-02-16T05:34:05.981320 (1644989645.98132) Object Count: 1 Bytes Used: 7 Storage Policy: default (0) Reported Put Timestamp: 1970-01-01T00:00:00.000000 (0) Reported Delete Timestamp: 1970-01-01T00:00:00.000000 (0) Reported Object Count: 0 Reported Bytes Used: 0 Chexor: 962368324c2ca023c56669d03ed92807 UUID: f33184e7-56d5-4c74-9d2e-5417c187d722-sdb3 X-Container-Sync-Point2: -1 X-Container-Sync-Point1: -1 No system metadata found in db file No user metadata found in db file Sharding Metadata: Type: root State: unsharded Incoming Syncs: Sync Point Remote ID Updated At 1 ce7268a1-f5d0-4b83-b993-af17b602a0ff-sdb1 2022-02-16T05:38:22.000000 (1644989902) 1 2af5abc0-7f70-4e2f-8f94-737aeaada7f4-sdb4 2022-02-16T05:38:22.000000 (1644989902) Outgoing Syncs: Sync Point Remote ID Updated At Partition 294 Hash 49b9ff074c502ec5e429e7af99a30624 As a follow up to the device in DB ID patch we can see that the replicas at sdb1 and sdb4 have replicated with this node. Change-Id: I23d786e82c6710bea7660a9acf8bbbd113b5b727
60 lines
2.1 KiB
Python
Executable File
60 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Licensed 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 sqlite3
|
|
import sys
|
|
from optparse import OptionParser
|
|
|
|
from swift.cli.info import print_info, InfoSystemExit
|
|
from swift.common.exceptions import LockTimeout
|
|
|
|
|
|
def run_print_info(args, opts):
|
|
try:
|
|
print_info('container', *args, **opts)
|
|
except InfoSystemExit:
|
|
sys.exit(1)
|
|
except (sqlite3.OperationalError, LockTimeout) as e:
|
|
if not opts.get('stale_reads_ok'):
|
|
opts['stale_reads_ok'] = True
|
|
print('Warning: Possibly Stale Data')
|
|
run_print_info(args, opts)
|
|
sys.exit(2)
|
|
else:
|
|
print('Container info failed: %s' % e)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = OptionParser('%prog [options] CONTAINER_DB_FILE')
|
|
parser.add_option(
|
|
'-d', '--swift-dir', default='/etc/swift',
|
|
help="Pass location of swift directory")
|
|
parser.add_option(
|
|
'--drop-prefixes', default=False, action="store_true",
|
|
help="When outputting metadata, drop the per-section common prefixes")
|
|
parser.add_option(
|
|
'-v', '--verbose', default=False, action="store_true",
|
|
help="Show all shard ranges. By default, only the number of shard "
|
|
"ranges is displayed if there are many shards.")
|
|
parser.add_option(
|
|
'--sync', '-s', default=False, action="store_true",
|
|
help="Output the contents of the incoming/outging sync tables")
|
|
|
|
options, args = parser.parse_args()
|
|
|
|
if len(args) != 1:
|
|
sys.exit(parser.print_help())
|
|
|
|
run_print_info(args, vars(options))
|