public Synchronizer getConfiguredSynchronizer(GlobalSession session) throws NoCollectionKeysSetException, URISyntaxException, NonObjectJSONException, IOException, ParseException { Repository remote = wrappedServerRepo(); Synchronizer synchronizer = new ServerLocalSynchronizer(); synchronizer.repositoryA = remote; synchronizer.repositoryB = this.getLocalRepository(); synchronizer.load(getConfig()); return synchronizer; }
/** * We synced this engine! Persist timestamps and advance the session. * * @param synchronizer the <code>Synchronizer</code> that succeeded. */ @Override public void onSynchronized(Synchronizer synchronizer) { Logger.debug(LOG_TAG, "onSynchronized."); SynchronizerConfiguration newConfig = synchronizer.save(); if (newConfig != null) { persistConfig(newConfig); } else { Logger.warn(LOG_TAG, "Didn't get configuration from synchronizer after success."); } Logger.info(LOG_TAG, "Advancing session."); session.advance(); }
@Override public void execute() throws NoSuchStageException { final String name = getEngineName(); Logger.debug(LOG_TAG, "Starting execute for " + name); try { if (!this.isEnabled()) { Logger.info(LOG_TAG, "Skipping stage " + name + "."); session.advance(); return; } } catch (MetaGlobalException.MetaGlobalMalformedSyncIDException e) { // Bad engine syncID. This should never happen. Wipe the server. try { session.updateMetaGlobalWith( name, new EngineSettings(Utils.generateGuid(), this.getStorageVersion())); Logger.info( LOG_TAG, "Wiping server because malformed engine sync ID was found in meta/global."); wipeServer(); Logger.info(LOG_TAG, "Wiped server after malformed engine sync ID found in meta/global."); } catch (Exception ex) { session.abort( ex, "Failed to wipe server after malformed engine sync ID found in meta/global."); } } catch (MetaGlobalException.MetaGlobalMalformedVersionException e) { // Bad engine version. This should never happen. Wipe the server. try { session.updateMetaGlobalWith( name, new EngineSettings(Utils.generateGuid(), this.getStorageVersion())); Logger.info( LOG_TAG, "Wiping server because malformed engine version was found in meta/global."); wipeServer(); Logger.info(LOG_TAG, "Wiped server after malformed engine version found in meta/global."); } catch (Exception ex) { session.abort( ex, "Failed to wipe server after malformed engine version found in meta/global."); } } catch (MetaGlobalException.MetaGlobalStaleClientSyncIDException e) { // Our syncID is wrong. Reset client and take the server syncID. Logger.warn( LOG_TAG, "Remote engine syncID different from local engine syncID:" + " resetting local engine and assuming remote engine syncID."); this.resetLocal(e.serverSyncID); } catch (MetaGlobalException e) { session.abort(e, "Inappropriate meta/global; refusing to execute " + name + " stage."); return; } Synchronizer synchronizer; try { synchronizer = this.getConfiguredSynchronizer(session); } catch (NoCollectionKeysSetException e) { session.abort(e, "No CollectionKeys."); return; } catch (URISyntaxException e) { session.abort(e, "Invalid URI syntax for server repository."); return; } catch (NonObjectJSONException e) { session.abort(e, "Invalid persisted JSON for config."); return; } catch (IOException e) { session.abort(e, "Invalid persisted JSON for config."); return; } catch (ParseException e) { session.abort(e, "Invalid persisted JSON for config."); return; } Logger.debug(LOG_TAG, "Invoking synchronizer."); synchronizer.synchronize(session.getContext(), this); Logger.debug(LOG_TAG, "Reached end of execute."); }