Синхронизация S3 [дубликат]

Примечание. Несмотря на то, что я разместил собственное решение, я бы рекомендовал использовать git-up , что также является принятым ответом.


Я знаю, что этот вопрос почти 3 года, но я задал себе тот же вопрос и не нашел готового решения. Итак, я создал собственный скрипт командной оболочки git.

Здесь он идет, скрипт git-ffwd-update делает следующее ...

  1. он выдает git remote update, чтобы получить значения lates revs
  2. , затем использует git remote show, чтобы получить список локальных ветвей, отслеживающих удаленную ветвь (например, ветви, которые могут использоваться с git pull)
  3. , затем он проверяет с помощью git rev-list --count .., сколько из них фиксирует локальную ветвь за пультом (и наоборот наоборот)
  4. , если локальная ветвь 1 или более совершает движение вперед, она НЕ может быть переадресована и должна быть объединены или переустановлены вручную
  5. , если локальная ветвь равна 0, и вперед 1 и более, она может быть быстро переадресована git branch -l -f -t

скрипт можно вызвать как:

$ git ffwd-update
Fetching origin
 branch bigcouch was 10 commit(s) behind of origin/bigcouch. reseting local branch to remote
 branch develop was 3 commit(s) behind of origin/develop. reseting local branch to remote
 branch master is 6 commit(s) behind and 1 commit(s) ahead of origin/master. could not be fast-forwarded

Полный скрипт должен быть сохранен как git-ffwd-update и должен находиться на PATH.

#!/bin/bash

main() {
  REMOTES="$@";
  if [ -z "$REMOTES" ]; then
    REMOTES=$(git remote);
  fi
  REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
  CLB=$(git branch -l|awk '/^\*/{print $2}');
  echo "$REMOTES" | while read REMOTE; do
    git remote update $REMOTE
    git remote show $REMOTE -n \
    | awk '/merges with remote/{print $5" "$1}' \
    | while read line; do
      RB=$(echo "$line"|cut -f1 -d" ");
      ARB="refs/remotes/$REMOTE/$RB";
      LB=$(echo "$line"|cut -f2 -d" ");
      ALB="refs/heads/$LB";
      NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0));
      NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0));
      if [ "$NBEHIND" -gt 0 ]; then
        if [ "$NAHEAD" -gt 0 ]; then
          echo " branch $LB is $NBEHIND commit(s) behind and $NAHEAD commit(s) ahead of $REMOTE/$RB. could not be fast-forwarded";
        elif [ "$LB" = "$CLB" ]; then
          echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. fast-forward merge";
          git merge -q $ARB;
        else
          echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. reseting local branch to remote";
          git branch -l -f $LB -t $ARB >/dev/null;
        fi
      fi
    done
  done
}

main $@

6
задан Todd 26 October 2015 в 15:12
поделиться

2 ответа

порядок не гарантируется, возможность доставки сообщений более одного раза и более одного EC2, получающего одно и то же сообщение

. Вероятность получения одного и того же сообщения более одного раза низкий. Это просто «возможно», но не очень вероятно. Если это по существу только раздражение, если в отдельных случаях вам придется обрабатывать файл более одного раза, то SQS кажется вполне разумным вариантом.

В противном случае вам понадобится внешний механизм.

Установка «заблокированного» заголовка объекта имеет свою проблему - когда вы перезаписываете объект с помощью самой копии (это происходит при изменении метаданных - новой копии объекта создается с одним и тем же ключом), тогда вы подвержены строкам и стрелкам возможной согласованности.

Q: Какая модель согласованности данных использует Amazon S3?

Amazon Ведра S3 во всех регионах обеспечивают согласованность после записи для PUTS новых объектов и возможную согласованность для перезаписывания ПУТС и DELETES.

https://aws.amazon.com/s3/faqs/

Обновление метаданных - это «переписать PUT». Ваш новый заголовок может быть не сразу видимым, и если два или более рабочих задают свой собственный уникальный заголовок (например, x-amz-meta-locked: i-12345678), вполне возможно, что сценарий, подобный следующему, будет воспроизведен (W1, W2 = Worker # 1 и # 2):

W1: HEAD object (no lock header seen)
W2: HEAD object (no lock header seen)
W1: set header
W2: set header
W1: HEAD object (sees its own lock header)
W2: HEAD object (sees its own lock header)

Тот же самый или аналогичный сбой может произойти с несколькими различными перестановками времени.

Объекты не могут быть эффективно заблокированы в возможная среда согласования.

7
ответ дан Michael - sqlbot 21 August 2018 в 06:54
поделиться
  • 1
    TLDR: вам нужна база данных для работы с базами данных. – tedder42 27 October 2015 в 02:19
  • 2
    @ tedder42: Действительно. – Michael - sqlbot 27 October 2015 в 04:35
  • 3
    Будет ли Amazon Elastic File работать лучше? Или это просто другой интерфейс с бэкэнд S3 (или, по крайней мере, те же ограничения)? – Todd 30 October 2015 в 22:06
  • 4
    Эластичная файловая система должна работать намного лучше. Он не является интерфейсом для S3, он сразу же согласован и поддерживает фактическую блокировку NFS ... но в настоящее время он все еще находится в режиме предварительного просмотра и доступен только в us-west-2 (Oregon). – Michael - sqlbot 30 October 2015 в 22:13
1
ответ дан Tejas 1 November 2018 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: