diff -Naur ceph-15.2.8-orig/src/mds/PurgeQueue.cc ceph-15.2.8/src/mds/PurgeQueue.cc --- ceph-15.2.8-orig/src/mds/PurgeQueue.cc 2020-12-16 18:29:50.000000000 +0100 +++ ceph-15.2.8/src/mds/PurgeQueue.cc 2021-03-01 07:57:26.654460816 +0100 @@ -503,7 +503,7 @@ in_flight[expire_to] = item; logger->set(l_pq_executing, in_flight.size()); - files_high_water = std::max(files_high_water, in_flight.size()); + files_high_water = std::max(files_high_water, static_cast(in_flight.size())); logger->set(l_pq_executing_high_water, files_high_water); auto ops = _calculate_ops(item); ops_in_flight += ops; @@ -581,7 +581,7 @@ logger->set(l_pq_executing_ops_high_water, ops_high_water); in_flight.erase(expire_to); logger->set(l_pq_executing, in_flight.size()); - files_high_water = std::max(files_high_water, in_flight.size()); + files_high_water = std::max(files_high_water, static_cast(in_flight.size())); logger->set(l_pq_executing_high_water, files_high_water); return; } @@ -659,7 +659,7 @@ in_flight.erase(iter); logger->set(l_pq_executing, in_flight.size()); - files_high_water = std::max(files_high_water, in_flight.size()); + files_high_water = std::max(files_high_water, static_cast(in_flight.size())); logger->set(l_pq_executing_high_water, files_high_water); dout(10) << "in_flight.size() now " << in_flight.size() << dendl; diff -Naur ceph-15.2.8-orig/src/pybind/ceph_argparse.py ceph-15.2.8/src/pybind/ceph_argparse.py --- ceph-15.2.8-orig/src/pybind/ceph_argparse.py 2020-12-16 18:29:50.000000000 +0100 +++ ceph-15.2.8/src/pybind/ceph_argparse.py 2021-02-26 06:57:25.428574224 +0100 @@ -1319,7 +1319,10 @@ # otherwise it will keep polling until timeout or thread stops. # wait for INT32_MAX, as python 3.6.8 use int32_t to present the # timeout in integer when converting it to nanoseconds - timeout = (1 << (32 - 1)) - 1 + #timeout = (1 << (32 - 1)) - 1 + # On arm32 this leads to a nearly immediately thrown timeout exception... + # The following works... + timeout = (1 << (29 - 1)) - 1 t = RadosThread(func, *args, **kwargs) # allow the main thread to exit (presumably, avoid a join() on this diff -Naur ceph-15.2.8-orig/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc ceph-15.2.8/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc --- ceph-15.2.8-orig/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc 2020-12-16 18:29:50.000000000 +0100 +++ ceph-15.2.8/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc 2021-02-25 16:47:45.405117124 +0100 @@ -234,7 +234,7 @@ json_spirit::mObject root_obj; root_obj["replay_state"] = replay_state; - root_obj["remote_snapshot_timestamp"] = remote_snap_info->timestamp.sec(); + root_obj["remote_snapshot_timestamp"] = static_cast(remote_snap_info->timestamp.sec()); auto matching_remote_snap_id = util::compute_remote_snap_id( m_state_builder->local_image_ctx->image_lock, @@ -248,8 +248,8 @@ // use the timestamp from the matching remote image since // the local snapshot would just be the time the snapshot was // synced and not the consistency point in time. - root_obj["local_snapshot_timestamp"] = - matching_remote_snap_it->second.timestamp.sec(); + root_obj["local_snapshot_timestamp"] = static_cast( + matching_remote_snap_it->second.timestamp.sec()); } matching_remote_snap_it = m_state_builder->remote_image_ctx->snap_info.find( @@ -257,7 +257,7 @@ if (m_remote_snap_id_end != CEPH_NOSNAP && matching_remote_snap_it != m_state_builder->remote_image_ctx->snap_info.end()) { - root_obj["syncing_snapshot_timestamp"] = remote_snap_info->timestamp.sec(); + root_obj["syncing_snapshot_timestamp"] = static_cast(remote_snap_info->timestamp.sec()); root_obj["syncing_percent"] = static_cast( 100 * m_local_mirror_snap_ns.last_copied_object_number / static_cast(std::max(1U, m_local_object_count)));