From 08263b26725db6e87097ae2ce9a571390dfefa85 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Nov 2019 08:42:28 -0800 Subject: [PATCH 1/3] add helpful comment about mysterious code --- libraries/entities/src/EntityTree.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index fed9090ddb..9066e76752 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1942,6 +1942,8 @@ int EntityTree::processEditPacketData(ReceivedMessage& message, const unsigned c FilterType filterType = isPhysics ? FilterType::Physics : (isAdd ? FilterType::Add : FilterType::Edit); bool allowed = (!isPhysics && senderNode->isAllowedEditor()) || filterProperties(existingEntity, properties, properties, wasChanged, filterType); if (!allowed) { + // the update failed and we need to convey that fact to the sender + // our method is to re-assert the current properties and bump the lastEdited timestamp auto timestamp = properties.getLastEdited(); properties = EntityItemProperties(); properties.setLastEdited(timestamp); From 3b8275c240a9c3f9c7d3337f21ad89e212a1a3c8 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Nov 2019 08:44:33 -0800 Subject: [PATCH 2/3] _lastEdited can only increase or be reset --- libraries/entities/src/EntityItem.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 2a0fb893cf..3dd60d1095 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -2707,10 +2707,12 @@ quint64 EntityItem::getLastEdited() const { } void EntityItem::setLastEdited(quint64 lastEdited) { - withWriteLock([&] { - _lastEdited = _lastUpdated = lastEdited; - _changedOnServer = glm::max(lastEdited, _changedOnServer); - }); + if (lastEdited == 0 || lastEdited > _lastEdited) { + withWriteLock([&] { + _lastEdited = _lastUpdated = lastEdited; + _changedOnServer = glm::max(lastEdited, _changedOnServer); + }); + } } void EntityItem::markAsChangedOnServer() { From 0bccc389067a3cbb07a75b5bb6b10765d5d238b7 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Tue, 19 Nov 2019 08:52:14 -0800 Subject: [PATCH 3/3] remove one call to usecTimestampNow() --- libraries/entities/src/EntityItemProperties.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ae2e83affe..319dfc922f 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -5071,8 +5071,9 @@ void EntityItemProperties::convertToCloneProperties(const EntityItemID& entityID setEntityHostType(entity::HostType::LOCAL); setCollisionless(true); } - setCreated(usecTimestampNow()); - setLastEdited(usecTimestampNow()); + uint64_t now = usecTimestampNow(); + setCreated(now); + setLastEdited(now); setCloneable(ENTITY_ITEM_DEFAULT_CLONEABLE); setCloneLifetime(ENTITY_ITEM_DEFAULT_CLONE_LIFETIME); setCloneLimit(ENTITY_ITEM_DEFAULT_CLONE_LIMIT);