#define BUCKET_SHARD_SYNC_SPAWN_WINDOW 20
#define DATA_SYNC_MAX_ERR_ENTRIES 10
-enum RemoteDatalogStatus {
- RemoteNotTrimmed = 0,
- RemoteTrimmed = 1,
- RemoteMightTrimmed = 2
-};
-
class RGWDataSyncShardCR : public RGWCoroutine {
RGWDataSyncEnv *sync_env;
RGWDataChangesLogInfo shard_info;
string datalog_marker;
- RemoteDatalogStatus remote_trimmed;
Mutex inc_lock;
Cond inc_cond;
pool(_pool),
shard_id(_shard_id),
sync_marker(_marker),
- marker_tracker(NULL), truncated(false), remote_trimmed(RemoteNotTrimmed), inc_lock("RGWDataSyncShardCR::inc_lock"),
+ marker_tracker(NULL), truncated(false), inc_lock("RGWDataSyncShardCR::inc_lock"),
total_entries(0), spawn_window(BUCKET_SHARD_SYNC_SPAWN_WINDOW), reset_backoff(NULL),
lease_cr(nullptr), lease_stack(nullptr), error_repo(nullptr), max_error_entries(DATA_SYNC_MAX_ERR_ENTRIES),
retry_backoff_secs(RETRY_BACKOFF_SECS_DEFAULT), tn(_tn) {
return set_cr_error(retcode);
}
datalog_marker = shard_info.marker;
- remote_trimmed = RemoteNotTrimmed;
#define INCREMENTAL_MAX_ENTRIES 100
tn->log(20, SSTR("shard_id=" << shard_id << " datalog_marker=" << datalog_marker << " sync_marker.marker=" << sync_marker.marker));
if (datalog_marker > sync_marker.marker) {
spawned_keys.clear();
- if (sync_marker.marker.empty())
- remote_trimmed = RemoteMightTrimmed; //remote data log shard might be trimmed;
yield call(new RGWReadRemoteDataLogShardCR(sync_env, shard_id, &sync_marker.marker, &log_entries, &truncated));
if (retcode < 0) {
tn->log(0, SSTR("ERROR: failed to read remote data log info: ret=" << retcode));
return set_cr_error(retcode);
}
- if ((remote_trimmed == RemoteMightTrimmed) && sync_marker.marker.empty() && log_entries.empty())
- remote_trimmed = RemoteTrimmed;
- else
- remote_trimmed = RemoteNotTrimmed;
-
if (log_entries.size() > 0) {
tn->set_flag(RGW_SNS_FLAG_ACTIVE); /* actually have entries to sync */
}