Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import io.mongock.driver.api.entry.ChangeType;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -86,6 +87,7 @@ private List<ChangeEntry> getOriginalMigrationAsChangeEntryList(MongoCollection<
getDocumentStringValue(changeDocument, mappingFields.getAuthor()),
getDocumentDateValue(changeDocument, mappingFields.getTimestamp()),
ChangeState.EXECUTED,
ChangeType.EXECUTION,
getDocumentStringValue(changeDocument, mappingFields.getChangeLogClass()),
getDocumentStringValue(changeDocument, mappingFields.getChangeSetMethod()),
-1L,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import io.mongock.driver.api.entry.ChangeType;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -85,6 +86,7 @@ private List<ChangeEntry> getOriginalMigrationAsChangeEntryList(MongoCollection<
getDocumentStringValue(changeDocument, mappingFields.getAuthor()),
getDocumentDateValue(changeDocument, mappingFields.getTimestamp()),
ChangeState.EXECUTED,
ChangeType.EXECUTION,
getDocumentStringValue(changeDocument, mappingFields.getChangeLogClass()),
getDocumentStringValue(changeDocument, mappingFields.getChangeSetMethod()),
-1L,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public class ChangeEntry {
@Field("state")
private final ChangeState state;

@Field("type")
private final ChangeType type;

@Field("changeLogClass")
private final String changeLogClass;

Expand All @@ -48,6 +51,7 @@ public ChangeEntry(String executionId,
String author,
Date timestamp,
ChangeState state,
ChangeType type,
String changeLogClass,
String changeSetMethod,
long executionMillis,
Expand All @@ -58,6 +62,7 @@ public ChangeEntry(String executionId,
this.author = author;
this.timestamp = new Date(timestamp.getTime());
this.state = state;
this.type = type;
this.changeLogClass = changeLogClass;
this.changeSetMethod = changeSetMethod;
this.executionMillis = executionMillis;
Expand All @@ -68,6 +73,7 @@ public ChangeEntry(String executionId,
public static ChangeEntry createInstance(String executionId,
String author,
ChangeState state,
ChangeType type,
String changeSetId,
String changeSetClassName,
String changeSetName,
Expand All @@ -80,13 +86,16 @@ public static ChangeEntry createInstance(String executionId,
author,
new Date(),
state,
type,
changeSetClassName,
changeSetName,
executionMillis,
executionHostname,
metadata);
}



public String getExecutionId() {
return executionId;
}
Expand Down Expand Up @@ -127,19 +136,25 @@ public Object getMetadata() {
return metadata;
}

public ChangeType getType() {
return type;
}

@Override
public String toString() {
return "ChangeEntry{" +
"executionId='" + executionId + '\'' +
String sb = "ChangeEntry{" + "executionId='" + executionId + '\'' +
", changeId='" + changeId + '\'' +
", author='" + author + '\'' +
", timestamp=" + timestamp +
", state=" + state +
", type=" + type +
", changeLogClass='" + changeLogClass + '\'' +
", changeSetMethod='" + changeSetMethod + '\'' +
", metadata=" + metadata +
", executionMillis=" + executionMillis +
", executionHostname='" + executionHostname + '\'' +
'}';
return sb;
}

public String toPrettyString() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.mongock.driver.api.entry;

public enum ChangeType {
EXECUTION, BEFORE_EXECUTION
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ private ChangeEntry getChangeEntry() throws NoSuchMethodException {
"migrationExecutionId",
"changeAuthor",
ChangeState.EXECUTED,
ChangeType.EXECUTION,
"changeId",
ChangeEntryTest.class.getName(),
"changeSetMethod",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.mongock.runner.core.executor.operation.change;

import io.mongock.driver.api.entry.ChangeType;
import io.mongock.runner.core.internal.ChangeLogItem;
import io.mongock.runner.core.internal.ChangeSetItem;
import io.mongock.api.config.TransactionStrategy;
Expand Down Expand Up @@ -33,6 +34,8 @@
import static io.mongock.driver.api.entry.ChangeState.IGNORED;
import static io.mongock.driver.api.entry.ChangeState.ROLLBACK_FAILED;
import static io.mongock.driver.api.entry.ChangeState.ROLLED_BACK;
import static io.mongock.driver.api.entry.ChangeType.BEFORE_EXECUTION;
import static io.mongock.driver.api.entry.ChangeType.EXECUTION;

@NotThreadSafe
public abstract class MigrationExecutorBase<CONFIG extends ChangeExecutorConfiguration> implements Executor {
Expand Down Expand Up @@ -221,20 +224,21 @@ protected boolean isAlreadyExecuted(ChangeSetItem changeSetItem) {
protected void executeAndLogChangeSet(String executionId, String executionHostname, Object changelogInstance, ChangeSetItem changeSetItem) throws IllegalAccessException, InvocationTargetException {
ChangeEntry changeEntry = null;
boolean alreadyExecuted = false;
ChangeType type = changeSetItem.isBeforeChangeSets() ? BEFORE_EXECUTION : EXECUTION;
try {
if (!(alreadyExecuted = isAlreadyExecuted(changeSetItem)) || changeSetItem.isRunAlways()) {
logger.debug("executing changeSet[{}]", changeSetItem.getId());
final long executionTimeMillis = executeChangeSetMethod(changeSetItem.getMethod(), changelogInstance);
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, executionTimeMillis, EXECUTED);
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, executionTimeMillis, EXECUTED, type);
logger.debug("successfully executed changeSet[{}]", changeSetItem.getId());

} else {
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, IGNORED);
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, IGNORED, type);

}
} catch (Exception ex) {
logger.debug("failure when executing changeSet[{}]", changeSetItem.getId());
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, FAILED);
changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, FAILED, type);
throw ex;
} finally {
if (changeEntry != null) {
Expand Down Expand Up @@ -267,7 +271,8 @@ protected void rollbackIfPresentAndTrackChangeEntry(String executionId, String e
rollbackExecutionState = ROLLBACK_FAILED;
throw rollbackException;
} finally {
ChangeEntry changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, rollbackExecutionState);
ChangeType type = changeSetItem.isBeforeChangeSets() ? BEFORE_EXECUTION : EXECUTION;
ChangeEntry changeEntry = createChangeEntryInstance(executionId, executionHostname, changeSetItem, -1L, rollbackExecutionState, type);
logChangeEntry(changeEntry, changeSetItem, false);
trackChangeEntry(changeSetItem, changeEntry, false);
}
Expand Down Expand Up @@ -297,11 +302,12 @@ private void logChangeEntry(ChangeEntry changeEntry, ChangeSetItem changeSetItem
}
}

protected ChangeEntry createChangeEntryInstance(String executionId, String executionHostname, ChangeSetItem changeSetItem, long executionTimeMillis, ChangeState state) {
protected ChangeEntry createChangeEntryInstance(String executionId, String executionHostname, ChangeSetItem changeSetItem, long executionTimeMillis, ChangeState state, ChangeType type) {
return ChangeEntry.createInstance(
executionId,
StringUtils.isNotEmpty(changeSetItem.getAuthor()) ? changeSetItem.getAuthor() : defaultAuthor,
state,
type,
changeSetItem.getId(),
changeSetItem.getMethod().getDeclaringClass().getName(),
changeSetItem.getMethod().getName(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.mongock.runner.core.internal;

import io.mongock.api.exception.MongockException;
import io.mongock.driver.api.entry.ChangeType;

import java.lang.reflect.Method;
import java.util.Objects;
import java.util.Optional;
Expand Down Expand Up @@ -89,6 +91,7 @@ public boolean isBeforeChangeSets() {
return beforeChangeSets;
}


@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down