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))
|