Add more logging in the event of replay put/delete failure (#1262)

* Add more logging in the event of replay put/delete failure
This commit is contained in:
gbrodman 2021-07-30 15:09:45 -04:00 committed by GitHub
parent a369e57e5c
commit fb002953c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -233,20 +233,25 @@ public class ReplayCommitLogsToSqlAction implements Runnable {
private void handleEntityPut(Entity entity) { private void handleEntityPut(Entity entity) {
Object ofyPojo = auditedOfy().toPojo(entity); Object ofyPojo = auditedOfy().toPojo(entity);
if (ofyPojo instanceof DatastoreEntity) { try {
DatastoreEntity datastoreEntity = (DatastoreEntity) ofyPojo; if (ofyPojo instanceof DatastoreEntity) {
datastoreEntity DatastoreEntity datastoreEntity = (DatastoreEntity) ofyPojo;
.toSqlEntity() datastoreEntity
.ifPresent( .toSqlEntity()
sqlEntity -> { .ifPresent(
sqlEntity.beforeSqlSaveOnReplay(); sqlEntity -> {
jpaTm().put(sqlEntity); sqlEntity.beforeSqlSaveOnReplay();
}); jpaTm().put(sqlEntity);
} else { });
// this should never happen, but we shouldn't fail on it } else {
logger.atSevere().log( // this should never happen, but we shouldn't fail on it
"%s does not implement DatastoreEntity, which is necessary for SQL replay.", logger.atSevere().log(
ofyPojo.getClass()); "%s does not implement DatastoreEntity, which is necessary for SQL replay.",
ofyPojo.getClass());
}
} catch (Throwable t) {
logger.atSevere().log("Error when replaying object %s", ofyPojo);
throw t;
} }
} }
@ -262,13 +267,18 @@ public class ReplayCommitLogsToSqlAction implements Runnable {
"Skipping SQL delete for kind %s since it is not convertible.", key.getKind()); "Skipping SQL delete for kind %s since it is not convertible.", key.getKind());
return; return;
} }
Class<?> entityClass = entityVKey.getKind(); try {
// Delete the key iff the class represents a JPA entity that is replicated Class<?> entityClass = entityVKey.getKind();
if (!NonReplicatedEntity.class.isAssignableFrom(entityClass) // Delete the key iff the class represents a JPA entity that is replicated
&& !DatastoreOnlyEntity.class.isAssignableFrom(entityClass) if (!NonReplicatedEntity.class.isAssignableFrom(entityClass)
&& entityClass.getAnnotation(javax.persistence.Entity.class) != null) { && !DatastoreOnlyEntity.class.isAssignableFrom(entityClass)
ReplaySpecializer.beforeSqlDelete(entityVKey); && entityClass.getAnnotation(javax.persistence.Entity.class) != null) {
jpaTm().delete(entityVKey); ReplaySpecializer.beforeSqlDelete(entityVKey);
jpaTm().delete(entityVKey);
}
} catch (Throwable t) {
logger.atSevere().log("Error when deleting key %s", entityVKey);
throw t;
} }
} }