
Tak jakoś wyszło.
W ramach technicznej analizy problemu przedstawiam poniżej mój punkt widzenia, dlaczego data stworzenia postu powinna być decydująca.
Opierając się na logice kompetytywności rajdu, decydującym czynnikiem na sukces lub porażkę rajdowca powinno być akcja użytkownika. Z oczywistych względów nie jest możliwy pomiar czasu kliknięcia użytkownika, wobec czego decydującym winien być najwcześniejszy moment rejestracji akcji użytkownika.
Istotna część kodu poniżej:
src/posts/create.js L16-38
// This is an internal method, consider using Topics.reply instead
const uid = data.uid;
const tid = data.tid;
const content = data.content.toString();
const timestamp = data.timestamp || Date.now();
const isMain = data.isMain || false;
if (!uid && parseInt(uid, 10) !== 0) {
throw new Error('[[error:invalid-uid]]');
}
if (data.toPid && !utils.isNumber(data.toPid)) {
throw new Error('[[error:invalid-pid]]');
}
const pid = await db.incrObjectField('global', 'nextPid');
let postData = {
pid: pid,
uid: uid,
tid: tid,
content: content,
timestamp: timestamp,
};
To jest kod odpowiedzialny za utworzenie postu przy odpowiedzi na utworzony temat.
W linii const timestamp = data.timestamp || Date.now(); tworzony jest timestamp, o ile nie istniał wcześniej (sytuacje inne niż tworzenie nowego posta).
Następnie w liniach
if (!uid && parseInt(uid, 10) !== 0) {
throw new Error('[[error:invalid-uid]]');
}
oraz
if (data.toPid && !utils.isNumber(data.toPid)) {
throw new Error('[[error:invalid-pid]]');
}
Przeprowadzone są walidacje kolejno ID użytkownika oraz ID rodzica.
W kolejnej linii const pid = await db.incrObjectField('global', 'nextPid'); tworzony jest ID postu, poprzez pobranie globalnego licznika ID postów.
Jako że wszystko wykonuje się asynchronicznie, zdarzenia mogą być dowolnie przeplatane przez silnik JavaScriptu. Ponadto dostęp do bazy danych w kontekście globalnego licznika ID postów może być dowolnie obsłużone przez serwer bazy danych.
Wobec powyższego ustawienie znacznika czasowego posta oraz ID posta nie jest transakcyjne i mogą dowolnie się przeplatać, zaś znacznik czasowy posta jest w każdym przypadku wyznaczany pierwszy.
Z uwagi na powyższe moją rekomendacją, przy rzadkiej sytuacji gdzie id posta A jest wcześniejsza niż id posta B, zaś znacznik czasowy posta B jest wcześniejszy niż znacznik czasowy posta A, uwzględnić post B jako wygrywający, jako że posiada wcześniejszy znacznik czasowy.
Analizowany kod dostępny jest na licencji otwartoźródłowej: https://github.com/NodeBB/NodeBB
Commit użyty do analizy: e8ca993aac4b90cfea131050814a19e144a27094
Pomimo problemów – dojechałem.

Na @Trotyl
Wędruję sobie po Loardii.
Tym razem idę, ale bez zgubienia się o minutę!
@juarez Do zasobów strony teutonia.one.pl mam dostęp i zatrządzam nimi od czasu gdy wstąpiłem na tron Królewski, a później na życzenie JCM Joanny.
Zasoby słownika SĄ na naszym serwerze. Faktem jest, że ostatnie zmiany zachodziły na bazie danych Sarmacji, więc jak masz backupa to podeślij. Się wyklepie.
Miło, że pamiętamy o naszej rocznicy. Cieszę się i doceniam, że Namiestnicy działają, dają swoje propozycje. Nie ze wszystkimi się zgadzam. Ale dzieją się rzeczy. To jest to, co jest w Teutonii świetne. Przypominamy sobie o niej. Wchodzimy, czasem chcemy się zaangażować… I zaczynamy robić rzeczy.
Z perspektywy czasu, cieszę się, że opuściliśmy te parę lat temu Sarmację. Jest duża szansa, że gdyby się tak nie stało, Teutonii by już nie było.
Niezmiernie żałuję, że nie mam czasu się w tym momencie zaangażować bardziej. Ale patrzę. I się bardzo cieszę.
Czy zbrodniarze z Sarmacji zostali z niej wyrzuceni, czy wciąż są na świecznikach?
Nigdy nie byłem „przeciwko” Sarmacji. Zbyt dużo w niej czasu spędziłem by być. Wręcz udało się uzyskać tam najwyższy tytuł.
Jednakże mam podejście typowo pragmatyczne. Co da nam taka normalizacja, jak na świecznikach są osoby, które w parę dni rozrzucą zabawki?
Awia została zatopiona. Nie mnie oceniać czy słusznie czy nie. Ale nie zachowujmy się niepoważnie. Szanujmy decyzję naszych poprzedników.
Jeśli jest zainteresowanie, można budować narrację o Awii, nie rysując jej ponownie na mapach. Myślę że może to być wręcz nawet ciekawsze.
Ja osobiście na pewno nie uznam takiego „odtopienia”, nawet jeżeli propozycja przejdzie.
@juarez Słownik się popsuł przez archiwizację od strony Sarmacji. Do ogarnięcia.
@ajp @Juarez
Miło widzieć że zaglądacie.
Niestety. Aktywności mało. Liczę na swój własny powrót bardziej, za jakiś czas.
Andrzej usiadł na krześle, naprzeciwko dziewczyny i zaczął:
– Jest duża szansa że możesz mieć związek z Teutonią. W ciągu ostatnich paru lat… Wiele się zdarzyło w Teutonii. Nie jesteś pierwszą, o której słyszeliśmy.
Wydaje się, że możesz być powiązana z Lożą Rycerzy Teutońskich. Być może trzeba będzie poszukać w archiwach, bądź przepytać parę osób. Być może tam dowiemy się coś więcej. Wyruszymy już dziś, więc przyszykuj się na podróż.
Andrzej Fryderyk zapukał do pokoju gościnnego. Usłyszawszy odpowiedź wszedł i skrzyżował swoje spojrzenie z dziewczyną.
– Dzień dobry, czy śniadanie smakowało?
– Jutro czeka nas ciężki dzień… A być może nawet nie jeden. Postaraj się wypocząć.
Zatrzymał się przed wyjściem z pokoju. Odwrócił się do dziewczyny, jakby chciał powiedzieć jeszcze jakieś słowo, jednakże nie powiedział ostatecznie nic.
Wyszedłszy z pokoju, zamyślił się. Być może właśnie wpakowaliśmy w większe bagno niż kiedykolwiek. Ta sprawa z daleka śmierdzi gelloństwem.
I z takimi myślami udał się do swych komnat.