Esempio n. 1
0
func handleSync(d *Server, ctx context.Context, cmd *wire.Command) (*wire.Response, error) {
	syncCmd := cmd.GetSyncCommand()
	who, err := id.Cast(syncCmd.Who)
	if err != nil {
		return nil, fmt.Errorf("Bad id `%s`: %v", syncCmd.Who, err)
	}

	if !d.MetaHost.IsInOnlineMode() {
		return nil, fmt.Errorf("Metadata Host is not online.")
	}

	client, err := d.MetaHost.DialID(who)
	if err != nil {
		return nil, err
	}

	// This might create a new, empty store if it does not exist yet:
	remoteStore, err := d.Repo.Store(who)
	if err != nil {
		return nil, err
	}

	if err := client.Fetch(remoteStore); err != nil {
		return nil, err
	}

	if err := d.Repo.OwnStore.SyncWith(remoteStore); err != nil {
		return nil, err
	}

	return nil, nil
}