2012-05-27 2 views
0

버그를 해결하려고합니다. 다음 함수는 tabs라는 사용자 속성에 Key 객체를 추가합니다. 어떤 이유로 사용자 엔터티에서 put()을 호출 한 후 새로 추가 된 키가 저장되지 않습니다. 이유를 알아낼 수 없었습니다. 아마도 변경 사항이 즉시 나타나지 않도록 지연 될 수 있습니까? 이 경우 memcache 솔루션입니까?Datastore가 엔티티에 새 변경 사항을 저장하지 않습니다.

class User(GeoModel): 
    tabs = db.ListProperty(db.Key) 

@db.transactional 
def add_tab_transaction(self, user_key, tab_key): 
    user = models.User.get(user_key) 
    user.tabs.append(tab_key) 
    user.put() 
    logging.debug('tabs this user has:') 
    logging.debug(user.tabs) # prints the list with the new value 
    user = models.User.get(user_key) 
    logging.debug('rechecking the same thing:') 
    logging.debug(user.tabs) # prints the list without the new value 
+0

로컬 또는 서버에서 발생하는 것을보고 계십니까? 그리고 서버가 HRD라면? 서버에서 –

+0

, 예, 복제가 높음 – Uri

+0

이 경우 get()을 호출 할 때 put()이 모든 복제본에 쓰기를 완료하지 않을 가능성이 있습니다.이 경우 get()은 이전 값을 반환해야합니다. 잠시 후 다른 것을 실행하여 이것을 테스트 할 수 있습니다. 조금씩, 나중에 1 초가 지나면 말입니다. 이렇게하면 이전 데이터가 반환되는 중입니까? –

답변

0

이 문제는 Isolation and Consistency에 설명되어 있습니다.

"트랜잭션에서 모든 읽기는 트랜잭션이 시작될 때 Datastore의 현재 일관된 상태를 반영합니다. 트랜잭션 내에서 이전의 put 및 삭제는 포함되지 않습니다."

+0

여기서는 함수 내부의 로깅에 대해 설명하지만 데이터 저장소 뷰어에서이 함수를 실행 한 후 오랜 시간 (분) 동안 이전 데이터가 표시되는 이유를 설명하지 않습니다. – Uri

+0

나는이 문제를 지금은 복제 할 수 없기 때문에 이것을 대답으로 표시 할 것이다. – Uri

+0

@Uri 데이터 저장소 뷰어는 다른 API와 동일한 API를 사용합니다. 행을 클릭하면 그 행이 강력하게 일관된 읽기를 수행하고 최신 데이터를 표시합니다. –

관련 문제